码迷,mamicode.com
首页 > Web开发 > 详细

.NET文件操作帮助类

时间:2015-07-18 13:58:14      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Web;

namespace ZC.Utils
{
    public partial class FileHelper
    {

        //public static string  GetUpFilesPath(string Project__)
        //{
        //    string RootPath = HttpContext.Current.Server.MapPath("/") + "UpFiles";
        //    if (!Directory.Exists(RootPath)) RootPath = HttpContext.Current.Server.MapPath("../") + "UpFiles";
        //    if (!Directory.Exists(RootPath))
        //    {
        //        RootPath = HttpContext.Current.Request.Url.ToString();
        //        RootPath = RootPath.Substring(0, RootPath.IndexOf("/" + Project__ + "/") + 1);
        //    }
        //    return RootPath;
        //}


        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool Exists(string fileName)
        {
            if (fileName == null || fileName.Trim() == "")
            {
                return false;
            }

            if (File.Exists(fileName))
            {
                return true;
            }

            return false;
        }

        /// <summary>
        /// 判断目录是否存在
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool ExistsDir(string dir)
        {
            if (Directory.Exists(dir))
            {
                return true;
            }

            return false;
        }


        /// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="dirName"></param>
        /// <returns></returns>
        public static bool CreateDir(string dirName)
        {

          

            if (!Directory.Exists(dirName))
            {
                Directory.CreateDirectory(dirName);
            }
            return true;
        }

        /// <summary>
        /// 为全路径文件创建文件夹
        /// </summary>
        /// <param name="dirName"></param>
        /// <returns></returns>
        public static bool CreateDirByFilePath(string FilePath)
        {
            CreateDir(GetDirForFile(FilePath));
            return true;
        }

        /// <summary>
        /// 为全路径文件创建文件夹
        /// </summary>
        /// <param name="dirName"></param>
        /// <returns></returns>
        public static string  GetDirForFile(string FilePath)
        {
            return  FilePath.Substring(0, FilePath.LastIndexOf( Path.DirectorySeparatorChar));
        }


        /// <summary>
        /// 创建新文件,如果存在,则先删除
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool CreateNewFile(string fileName)
        {
            if (FileHelper.Exists(fileName))  FileHelper.DeleteFile(fileName) ;
            
            CreateDir(fileName.Substring(0, fileName.LastIndexOf("\\")));

            if (!File.Exists(fileName))
            {
                FileStream fs = File.Create(fileName);
                fs.Close();
                fs.Dispose();
            }
            return true;

        }


        /// <summary>
        /// 创建文件
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool CreateFile(string fileName)
        {

            CreateDir(PathHelper.GetParentPath(fileName));

            if (!File.Exists(fileName))
            {
                FileStream fs = File.Create(fileName);
                fs.Close();
                fs.Dispose();
            }
            return true;

        }


        /// <summary>
        /// 读文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string Read(string fileName)
        {
            if (!Exists(fileName))
            {
                return null;
            }
            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                return new StreamReader(fs).ReadToEnd();
            }
        }

        /// <summary>
        /// 读ReadUtf8文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string ReadUtf8(string fileName)
        {
                if (!Exists(fileName))
                {
                    throw new FileNotFoundException();
                }
                //将文件信息读入流中
                using (FileStream fs = new FileStream(fileName, FileMode.Open))
                {
                    return new StreamReader(fs, System.Text.Encoding.UTF8).ReadToEnd();
                }
        }

        /// <summary>
        /// 读ReadUtf8文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static StringBuilder ReadUtf8StringBuilder(string fileName)
        {
            try
            {
                if (!Exists(fileName))
                {
                    return null;
                }
                //将文件信息读入流中
                using (FileStream fs = new FileStream(fileName, FileMode.Open))
                {
                    return new StringBuilder(new StreamReader(fs, System.Text.Encoding.UTF8).ReadToEnd());
                }
            }
            catch
            {
                return new StringBuilder();
            }
        }

        /// <summary>
        /// 读ReadDefault文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string ReadDefault(string fileName)
        {
            if (!Exists(fileName))
            {
                return null;
            }
            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                return new StreamReader(fs, System.Text.Encoding.Default).ReadToEnd();
            }
        }

        ///// <summary>
        ///// 写WriteDefault文件
        ///// </summary>
        ///// <param name="fileName">文件名</param>
        ///// <param name="content">文件内容</param>
        ///// <returns></returns>
        //public static bool WriteDefault(string fileName, string content)
        //{
        //    if (!Exists(fileName) || content == null)
        //    {
        //        return false;
        //    }

        //    //将文件信息读入流中
        //    using (FileStream fs = new FileStream(fileName, FileMode.Create))
        //    {
        //        lock (fs)//锁住流
        //        {
        //            if (!fs.CanWrite)
        //            {
        //                throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
        //            }

        //            byte[] buffer = Encoding.Default.GetBytes(content);
        //            fs.Write(buffer, 0, buffer.Length);
        //            return true;
        //        }
        //    }
        //}

        /// <summary>
        /// 读ReadJson文件内容
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static string ReadJson(string fileName)
        {
            if (!Exists(fileName))
            {
                return null;
            }
            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {


                return new StreamReader(fs, System.Text.Encoding.Default).ReadToEnd();
            }
        }


        public static string ReadLine(string fileName)
        {
            if (!Exists(fileName))
            {
                return null;
            }
            using (FileStream fs = new FileStream(fileName, FileMode.Open))
            {
                return new StreamReader(fs).ReadLine();
            }
        }


         /// <summary>
        /// 写WriteUtf8文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <param name="content">文件内容</param>
        /// <returns></returns>
        public static bool WriteDefault(string fileName, string content, bool IsCreate = true, bool IsOverWrite = true)
        {
            if (content == null) return false;

            if (Exists(fileName) && IsOverWrite == false)
            {
                return false;
            }

            if (IsCreate)
            {
                FileHelper.CreateFile(fileName);
            }

            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Create))
            {
                lock (fs)//锁住流
                {
                    if (!fs.CanWrite)
                    {
                        throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
                    }

                    byte[] buffer = Encoding.Default.GetBytes(content);
                    fs.Write(buffer, 0, buffer.Length);
                    return true;
                }
            }
        }

        /// <summary>
        /// 写WriteUtf8文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <param name="content">文件内容</param>
        /// <returns></returns>
        public static bool WriteUtf8(string fileName, string content ,bool IsCreate=true,bool IsOverWrite=true)
        {
            if (content == null) return false;

            if (Exists(fileName) && IsOverWrite == false)
            {
                return false;
            }

            if (IsCreate)
            {
                FileHelper.CreateFile(fileName);
            }

            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Create))
            {
                lock (fs)//锁住流
                {
                    if (!fs.CanWrite)
                    {
                        throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
                    }

                    byte[] buffer = Encoding.UTF8.GetBytes(content);
                    fs.Write(buffer, 0, buffer.Length);
                    fs.Flush();
                    fs.Close();
                    return true;
                }
            }
        }

   
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <param name="content">文件内容</param>
        /// <returns></returns>
        public static bool Write(string fileName, string content)
        {
            if (!Exists(fileName) || content == null)
            {
                return false;
            }

            //将文件信息读入流中
            using (FileStream fs = new FileStream(fileName, FileMode.Create))
            {
                lock (fs)//锁住流
                {
                    if (!fs.CanWrite)
                    {
                        throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
                    }

                    byte[] buffer = Encoding.Default.GetBytes(content);
                    fs.Write(buffer, 0, buffer.Length);
                    fs.Flush();
                    fs.Close();
                    return true;
                }
            }
        }


 
        /// <summary>
        /// 写入一行
        /// </summary>
        /// <param name="fileName">文件名</param>
        /// <param name="content">内容</param>
        /// <returns></returns>
        public static bool WriteLine(string fileName, string content)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate | FileMode.Append))
            {
                lock (fs)
                {
                    if (!fs.CanWrite)
                    {
                        throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
                    }

                    StreamWriter sw = new StreamWriter(fs);
                    sw.WriteLine(content);
                    sw.Dispose();
                    sw.Close();
                    fs.Flush();
                    fs.Close();
                    return true;
                }
            }
        }


        public static bool CopyDir(DirectoryInfo fromDir, string toDir)
        {
            return CopyDir(fromDir, toDir, fromDir.FullName);
        }


        /// <summary>
        /// 复制目录
        /// </summary>
        /// <param name="fromDir">被复制的目录</param>
        /// <param name="toDir">复制到的目录</param>
        /// <returns></returns>
        public static bool CopyDir(string fromDir, string toDir)
        {
            if (fromDir == null || toDir == null)
            {
                throw new NullReferenceException("参数为空");
            }

            if (fromDir == toDir)
            {
                throw new Exception("两个目录都是" + fromDir);
            }

            if (!Directory.Exists(fromDir))
            {
                throw new IOException("目录fromDir=" + fromDir + "不存在");
            }

            DirectoryInfo dir = new DirectoryInfo(fromDir);
            return CopyDir(dir, toDir, dir.FullName);
        }

        /// <summary>
        /// 拷贝文件
        /// </summary>
        /// <param name="OrignFile">原始文件</param>
        /// <param name="NewFile">新文件路径</param>
        public static void FileCopy(string OrignFile, string NewFile,bool IsOverWrite=true)
        {
            File.Copy(OrignFile, NewFile, IsOverWrite);
        }

        /// <summary>
        /// 移动文件
        /// </summary>
        /// <param name="OrignFile">原始路径</param>
        /// <param name="NewFile">新路径</param>
        public static void FileMove(string OrignFile, string NewFile)
        {
            if (Exists(NewFile)) DeleteFile(NewFile);
            File.Move(OrignFile, NewFile);
        }


        /// <summary>
        /// 复制目录不带Html文件
        /// </summary>
        /// <param name="fromDir">被复制的目录</param>
        /// <param name="toDir">复制到的目录</param>
        /// <param name="rootDir">被复制的根目录</param>
        /// <returns></returns>
        public  static bool CopyDirWithoutHtml(DirectoryInfo fromDir, string toDir, string rootDir)
        {
            string filePath = string.Empty;
            foreach (FileInfo f in fromDir.GetFiles())
            {
                if (f.Name.ToLower().EndsWith("_.html")) continue;
                if (f.Name.ToLower().EndsWith("lck")) continue;
                filePath = toDir + f.FullName.Substring(rootDir.Length);
                string newDir = filePath.Substring(0, filePath.LastIndexOf("\\"));
                CreateDir(newDir);
                File.Copy(f.FullName, filePath, true);
            }

            foreach (DirectoryInfo dir in fromDir.GetDirectories())
            {
                CopyDirWithoutHtml(dir, toDir, rootDir);
            }

            return true;
        }

        /// <summary>
        /// 复制目录不带Html文件
        /// </summary>
        /// <param name="fromDir">被复制的目录</param>
        /// <param name="toDir">复制到的目录</param>
        /// <param name="rootDir">被复制的根目录</param>
        /// <returns></returns>
        public static bool CopyDirWithoutHtmlRoot(DirectoryInfo fromDir, string toDir, string rootDir, IList<string> Dics)
        {
            string filePath = string.Empty;
            foreach (FileInfo f in fromDir.GetFiles())
            {
                string fn = f.Name.ToLower();

                if (f.Name.ToLower().EndsWith("_.html")) continue;
                if (f.Name.ToLower().EndsWith("lck")) continue;
                if (f.Name.ToLower().EndsWith("db")) continue;
                if (f.Name.ToLower().EndsWith("docx")) continue;
                if (f.Name.ToLower().EndsWith("swf")) continue;

                var CsFile = new string[] { "index.html", "global.asax", "robots.txt", "uploadImg.html", "web.config" };
                if (CsFile.Contains(fn)) continue;
    
                filePath = toDir + f.FullName.Substring(rootDir.Length);
                string newDir = filePath.Substring(0, filePath.LastIndexOf("\\"));
                CreateDir(newDir);
                try
                {
                    File.Copy(f.FullName, filePath, true);
                }
                catch { }

                //continue;

                string f_ = f.Extension.ToLower();

                if (!(f_ == ".css") && !(f_ == ".js")) continue;

                string htmlStr = FileHelper.ReadUtf8(f.FullName);

                if (string.IsNullOrEmpty(htmlStr))
                {
                    htmlStr = "";
                }

                foreach (string FN in Dics)
                {

                    if (FN.ToLower() == "index.html")
                    {
                        htmlStr = htmlStr.Replace(FN, "/");
                        continue;
                    }

                    string FN_ = FN.Substring(0, FN.LastIndexOf("_."));
                    string[] Names = FN_.Split(‘_‘);
                    if (Names[1].ToLower() == "index")
                    {
                       if(!string.IsNullOrEmpty(htmlStr))  htmlStr = htmlStr.Replace(FN, "/" + Names[0] + "/");
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(htmlStr)) htmlStr = htmlStr.Replace(FN, "/" + Names[0] + "/" + Names[1] + "/");
                    }
                }

               

                //链接更改为根目录
                htmlStr = htmlStr.Replace("href=\"css", "href=\"/css");
                htmlStr = htmlStr.Replace("href=‘css", "href=‘/css");
                htmlStr = htmlStr.Replace("src=\"images", "src=\"/images");
                htmlStr = htmlStr.Replace("src=‘images", "src=‘/images");
                htmlStr = htmlStr.Replace("<img src=\"images", "<img src=\"/images");
                htmlStr = htmlStr.Replace("<img src=‘images", "<img src=‘/images");
                htmlStr = htmlStr.Replace("url(‘project", "url(‘/project");
                htmlStr = htmlStr.Replace("src=\"js", "src=\"/js");
                htmlStr = htmlStr.Replace("src=\‘js", "src=\‘/js");
                htmlStr = htmlStr.Replace("href=\"project", "href=\"/project");
                htmlStr = htmlStr.Replace("href=‘project", "href=‘/project");
                htmlStr = htmlStr.Replace("src=\"project", "src=\"/project");
                htmlStr = htmlStr.Replace("src=‘project", "src=‘/project");
                htmlStr = htmlStr.Replace("url(\"project", "url(\"/project");
                htmlStr = htmlStr.Replace("url(‘project", "url(‘/project");
                htmlStr = htmlStr.Replace("/10-16/images/", "/images/");
                htmlStr = htmlStr.Replace("href=\"Index.html\"", "href=\"/\"");
                htmlStr = htmlStr.Replace("href=‘Index.html‘", "href=‘/‘");
                htmlStr = htmlStr.Replace("/happy/To", "/To");
                htmlStr = htmlStr.Replace("/happy/", "/");
                
                htmlStr = htmlStr.Replace("http://10.35.128.68/PanPan_Member/", "/");
                if(htmlStr.Contains("10.35.128.68")){

                }
                FileHelper.WriteUtf8(filePath, htmlStr);

            }

            foreach (DirectoryInfo dir in fromDir.GetDirectories())
            {
                var CsDir = new string[] { "admin", "ashx", "autoMapping", "bin", "content", "happy", "upFiles", "views", "swf", "xml" };
                if (CsDir.Contains(dir.Name.ToLower())) continue;
                CopyDirWithoutHtmlRoot(dir, toDir, rootDir,Dics);
            }

            return true;
        }


        /// <summary>
        /// 复制目录
        /// </summary>
        /// <param name="fromDir">被复制的目录</param>
        /// <param name="toDir">复制到的目录</param>
        /// <param name="rootDir">被复制的根目录</param>
        /// <returns></returns>
        private static bool CopyDir(DirectoryInfo fromDir, string toDir, string rootDir)
        {
            string filePath = string.Empty;
            foreach (FileInfo f in fromDir.GetFiles())
            {
                filePath = toDir + f.FullName.Substring(rootDir.Length);
                string newDir = filePath.Substring(0, filePath.LastIndexOf("\\"));
                CreateDir(newDir);
                File.Copy(f.FullName, filePath, true);
            }

            foreach (DirectoryInfo dir in fromDir.GetDirectories())
            {
                CopyDir(dir, toDir, rootDir);
            }

            return true;
        }


        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="fileName">文件的完整路径</param>
        /// <returns></returns>
        public static bool DeleteFile(string fileName)
        {
            if (Exists(fileName))
            {
                File.Delete(fileName);
                return true;
            }
            return false;
        }


        public static void DeleteDir(DirectoryInfo dir)
        {
            if (dir == null)
            {
                throw new NullReferenceException("目录不存在");
            }

            try
            {
                foreach (DirectoryInfo d in dir.GetDirectories())
                {
                    DeleteDir(d);
                }


                foreach (FileInfo f in dir.GetFiles())
                {
                    DeleteFile(f.FullName);
                }


                dir.Delete();

            }
            catch { }

        }


        public static void DeleteDir(string  dir)
        {
            DeleteDir(new DirectoryInfo(dir));

        }

        /// <summary>
        /// 删除目录
        /// </summary>
        /// <param name="dir">制定目录</param>
        /// <param name="onlyDir">是否只删除目录</param>
        /// <returns></returns>
        public static bool DeleteDir(string dir, bool onlyDir)
        {
            if (dir == null || dir.Trim() == "")
            {
                throw new NullReferenceException("目录dir=" + dir + "不存在");
            }

            if (!Directory.Exists(dir))
            {
                return false;
            }

            DirectoryInfo dirInfo = new DirectoryInfo(dir);
            if (dirInfo.GetFiles().Length == 0 && dirInfo.GetDirectories().Length == 0)
            {
                Directory.Delete(dir);
                return true;
            }


            if (!onlyDir)
            {
                return false;
            }
            else
            {
                DeleteDir(dirInfo);
                return true;
            }

        }




        /// <summary>
        /// 在指定的目录中查找文件
        /// </summary>
        /// <param name="dir">目录</param>
        /// <param name="fileName">文件名</param>
        /// <returns></returns>
        public static bool FindFile(string dir, string fileName)
        {
            if (dir == null || dir.Trim() == "" || fileName == null || fileName.Trim() == "" || !Directory.Exists(dir))
            {
                return false;
            }

            DirectoryInfo dirInfo = new DirectoryInfo(dir);
            return FindFile(dirInfo, fileName);

        }

        public static IList<FileInfo> GetImportHmtlList(string Path)
        {
            IList<FileInfo> Files = new List<FileInfo>();


            DirectoryInfo theDir = new DirectoryInfo(Path);

            FileInfo[] subFiles = theDir.GetFiles();//获得文件

            foreach (FileInfo FileInfo in subFiles)
            {
              

                string name = FileInfo.Name.ToLower();


                if (name == "index.html") {
                    Files.Add(FileInfo);
                    continue; }

                if (!name.EndsWith("_.html") ) continue;

                string[] Name = name.Replace("_.html","").Split(‘_‘);
                if (Name.Length != 2) continue;

                Files.Add(FileInfo);
            }



            return Files;
        }

        public static IList<FileInfo> GetFileList(string Path)
        {
            IList<FileInfo> Files = new List<FileInfo>();

     
            DirectoryInfo theDir = new DirectoryInfo(Path);

            FileInfo[] subFiles = theDir.GetFiles();//获得文件

            foreach (FileInfo FileInfo in subFiles)
            {
                Files.Add(FileInfo);
            }
            return Files;
        }

        /// <summary>
        /// 获取目录及下级的所有文件
        /// </summary>
        /// <param name="Path"></param>
        /// <returns></returns>
        public static IList<FileInfo> GetAllFileList(string Path)
        {
            IList<FileInfo> Files = new List<FileInfo>();

            foreach (var F in GetFileList(Path))
            {
                Files.Add(F);
            }

            IList<string> Foldes = new List<string>();
            DirectoryInfo[] subDirectories = new DirectoryInfo(Path).GetDirectories();//获得目录

            foreach (DirectoryInfo dirinfo in subDirectories)
            {
               // Foldes.Add(dirinfo.Name);

                foreach (var F in GetFileList(dirinfo.FullName))
                {
                    Files.Add(F);
                }

            }

            return Files;
        }


        public static IList<string> GetFoldList(string Path)
        {
            IList<string> Foldes = new List<string>();
 
       
            DirectoryInfo theDir = new DirectoryInfo(Path);



            DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录

            foreach (DirectoryInfo dirinfo in subDirectories)
            {
                Foldes.Add(dirinfo.Name);
            }
            return Foldes;
        }


        public static bool FindFile(DirectoryInfo dir, string fileName)
        {
              

            foreach (DirectoryInfo d in dir.GetDirectories())
            {
                if (File.Exists(d.FullName + "//" + fileName))
                {
                    return true;
                }
                FindFile(d, fileName);
            }

            return false;
        }
        
    }
}

.NET文件操作帮助类

标签:

原文地址:http://www.cnblogs.com/huangdegen/p/4656705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!