天天看點

C# 檔案操作類1

using System;

using System.Text;

using System.IO;

namespace DotNet.Utilities

{

    /// <summary>

    /// 檔案操作夾

    /// </summary>

    public static class DirFile

    {

        #region 檢測指定目錄是否存在

        /// <summary>

        /// 檢測指定目錄是否存在

        /// </summary>

        /// <param name="directoryPath">目錄的絕對路徑</param>

        /// <returns></returns>

        public static bool IsExistDirectory(string directoryPath)

        {

            return Directory.Exists(directoryPath);

        }

        #endregion

        #region 檢測指定檔案是否存在,如果存在傳回true

        /// 檢測指定檔案是否存在,如果存在則傳回true。

        /// <param name="filePath">檔案的絕對路徑</param>       

        public static bool IsExistFile(string filePath)

            return File.Exists(filePath);

        #region 擷取指定目錄中的檔案清單

        /// 擷取指定目錄中所有檔案清單

        /// <param name="directoryPath">指定目錄的絕對路徑</param>       

        public static string[] GetFileNames(string directoryPath)

            //如果目錄不存在,則抛出異常

            if (!IsExistDirectory(directoryPath))

            {

                throw new FileNotFoundException();

            }

            //擷取檔案清單

            return Directory.GetFiles(directoryPath);

        #region 擷取指定目錄中所有子目錄清單,若要搜尋嵌套的子目錄清單,請使用重載方法.

        /// 擷取指定目錄中所有子目錄清單,若要搜尋嵌套的子目錄清單,請使用重載方法.

        public static string[] GetDirectories(string directoryPath)

            try

                return Directory.GetDirectories(directoryPath);

            catch (IOException ex)

                throw ex;

        #region 擷取指定目錄及子目錄中所有檔案清單

        /// 擷取指定目錄及子目錄中所有檔案清單

        /// <param name="directoryPath">指定目錄的絕對路徑</param>

        /// <param name="searchPattern">模式字元串,"*"代表0或N個字元,"?"代表1個字元。

        /// 範例:"Log*.xml"表示搜尋所有以Log開頭的Xml檔案。</param>

        /// <param name="isSearchChild">是否搜尋子目錄</param>

        public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild)

                if (isSearchChild)

                {

                    return Directory.GetFiles(directoryPath, searchPattern, SearchOption.AllDirectories);

                }

                else

                    return Directory.GetFiles(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);

        #region 檢測指定目錄是否為空

        /// 檢測指定目錄是否為空

        public static bool IsEmptyDirectory(string directoryPath)

                //判斷是否存在檔案

                string[] fileNames = GetFileNames(directoryPath);

                if (fileNames.Length > 0)

                    return false;

                //判斷是否存在檔案夾

                string[] directoryNames = GetDirectories(directoryPath);

                if (directoryNames.Length > 0)

                return true;

            catch

                //這裡記錄日志

                //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);

        #region 檢測指定目錄中是否存在指定的檔案

        /// 檢測指定目錄中是否存在指定的檔案,若要搜尋子目錄請使用重載方法.

        /// 範例:"Log*.xml"表示搜尋所有以Log開頭的Xml檔案。</param>       

        public static bool Contains(string directoryPath, string searchPattern)

                //擷取指定的檔案清單

                string[] fileNames = GetFileNames(directoryPath, searchPattern, false);

                //判斷指定檔案是否存在

                if (fileNames.Length == 0)

                    return true;

            catch (Exception ex)

                throw new Exception(ex.Message);

        /// 檢測指定目錄中是否存在指定的檔案

        public static bool Contains(string directoryPath, string searchPattern, bool isSearchChild)

                string[] fileNames = GetFileNames(directoryPath, searchPattern, true);

        #region 建立目錄

        /// 建立目錄

        /// <param name="dir">要建立的目錄路徑包括目錄名</param>

        public static void CreateDir(string dir)

            if (dir.Length == 0) return;

            if (!Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir))

                Directory.CreateDirectory(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir);

        #region 删除目錄

        /// 删除目錄

        /// <param name="dir">要删除的目錄路徑和名稱</param>

        public static void DeleteDir(string dir)

            if (Directory.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir))

                Directory.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir);

        #region 删除檔案

        /// 删除檔案

        /// <param name="file">要删除的檔案路徑和名稱</param>

        public static void DeleteFile(string file)

            if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + file))

                File.Delete(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + file);

        #region 建立檔案

        /// 建立檔案

        /// <param name="dir">帶字尾的檔案名</param>

        /// <param name="pagestr">檔案内容</param>

        public static void CreateFile(string dir, string pagestr)

            dir = dir.Replace("/", "\\");

            if (dir.IndexOf("\\") > -1)

                CreateDir(dir.Substring(0, dir.LastIndexOf("\\")));

            System.IO.StreamWriter sw = new System.IO.StreamWriter(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir, false, System.Text.Encoding.GetEncoding("GB2312"));

            sw.Write(pagestr);

            sw.Close();

        #region 移動檔案(剪貼--粘貼)

        /// 移動檔案(剪貼--粘貼)

        /// <param name="dir1">要移動的檔案的路徑及全名(包括字尾)</param>

        /// <param name="dir2">檔案移動到新的位置,并指定新的檔案名</param>

        public static void MoveFile(string dir1, string dir2)

            dir1 = dir1.Replace("/", "\\");

            dir2 = dir2.Replace("/", "\\");

            if (File.Exists(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1))

                File.Move(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2);

        #region 複制檔案

        /// 複制檔案

        /// <param name="dir1">要複制的檔案的路徑已經全名(包括字尾)</param>

        /// <param name="dir2">目标位置,并指定新的檔案名</param>

        public static void CopyFile(string dir1, string dir2)

                File.Copy(System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir1, System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\\" + dir2, true);

        #region 根據時間得到目錄名 / 格式:yyyyMMdd 或者 HHmmssff

        /// 根據時間得到目錄名yyyyMMdd

        public static string GetDateDir()

            return DateTime.Now.ToString("yyyyMMdd");

        /// 根據時間得到檔案名HHmmssff

        public static string GetDateFile()

            return DateTime.Now.ToString("HHmmssff");

        #region 複制檔案夾

        /// 複制檔案夾(遞歸)

        /// <param name="varFromDirectory">源檔案夾路徑</param>

        /// <param name="varToDirectory">目标檔案夾路徑</param>

        public static void CopyFolder(string varFromDirectory, string varToDirectory)

            Directory.CreateDirectory(varToDirectory);

            if (!Directory.Exists(varFromDirectory)) return;

            string[] directories = Directory.GetDirectories(varFromDirectory);

            if (directories.Length > 0)

                foreach (string d in directories)

                    CopyFolder(d, varToDirectory + d.Substring(d.LastIndexOf("\\")));

            string[] files = Directory.GetFiles(varFromDirectory);

            if (files.Length > 0)

                foreach (string s in files)

                    File.Copy(s, varToDirectory + s.Substring(s.LastIndexOf("\\")), true);

        #region 檢查檔案,如果檔案不存在則建立

        /// 檢查檔案,如果檔案不存在則建立 

        /// <param name="FilePath">路徑,包括檔案名</param>

        public static void ExistsFile(string FilePath)

            //if(!File.Exists(FilePath))   

            //File.Create(FilePath);   

            //以上寫法會報錯,詳細解釋請看下文.........  

            if (!File.Exists(FilePath))

                FileStream fs = File.Create(FilePath);

                fs.Close();

        #region 删除指定檔案夾對應其他檔案夾裡的檔案

        /// 删除指定檔案夾對應其他檔案夾裡的檔案

        /// <param name="varFromDirectory">指定檔案夾路徑</param>

        /// <param name="varToDirectory">對應其他檔案夾路徑</param>

        public static void DeleteFolderFiles(string varFromDirectory, string varToDirectory)

                    DeleteFolderFiles(d, varToDirectory + d.Substring(d.LastIndexOf("\\")));

                    File.Delete(varToDirectory + s.Substring(s.LastIndexOf("\\")));

        #region 從檔案的絕對路徑中擷取檔案名( 包含擴充名 )

        /// 從檔案的絕對路徑中擷取檔案名( 包含擴充名 )

        public static string GetFileName(string filePath)

            //擷取檔案的名稱

            FileInfo fi = new FileInfo(filePath);

            return fi.Name;

        /// 複制檔案參考方法,頁面中引用

        /// <param name="cDir">新路徑</param>

        /// <param name="TempId">模闆引擎替換編号</param>

        public static void CopyFiles(string cDir, string TempId)

            //{

            //    string TempStr = string.Empty;

            //    StreamWriter sw;

            //    {

            //        TempStr = TempStr.Replace("{$ChannelId$}", TempId);

            //        sw.Write(TempStr);

            //        sw.Close();

            //    }

            //}

        #region 建立一個目錄

        /// 建立一個目錄

        public static void CreateDirectory(string directoryPath)

            //如果目錄不存在則建立該目錄

                Directory.CreateDirectory(directoryPath);

        #region 建立一個檔案

        /// 建立一個檔案。

        /// <param name="filePath">檔案的絕對路徑</param>

        public static void CreateFile(string filePath)

                //如果檔案不存在則建立該檔案

                if (!IsExistFile(filePath))

                    //建立一個FileInfo對象

                    FileInfo file = new FileInfo(filePath);

                    //建立檔案

                    FileStream fs = file.Create();

                    //關閉檔案流

                    fs.Close();

        /// 建立一個檔案,并将位元組流寫入檔案。

        /// <param name="buffer">二進制流資料</param>

        public static void CreateFile(string filePath, byte[] buffer)

                    //寫入二進制流

                    fs.Write(buffer, 0, buffer.Length);

        #region 擷取文本檔案的行數

        /// 擷取文本檔案的行數

        public static int GetLineCount(string filePath)

            //将文本檔案的各行讀到一個字元串數組中

            string[] rows = File.ReadAllLines(filePath);

            //傳回行數

            return rows.Length;

        #region 擷取一個檔案的長度

        /// 擷取一個檔案的長度,機關為Byte

        public static int GetFileSize(string filePath)

            //建立一個檔案對象

            //擷取檔案的大小

            return (int)fi.Length;

        #region 擷取指定目錄中的子目錄清單

        /// 擷取指定目錄及子目錄中所有子目錄清單

        public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)

                    return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.AllDirectories);

                    return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);

        #region 向文本檔案寫入内容

        /// 向文本檔案中寫入内容

        /// <param name="text">寫入的内容</param>

        /// <param name="encoding">編碼</param>

        public static void WriteText(string filePath, string text, Encoding encoding)

            //向檔案寫入内容

            File.WriteAllText(filePath, text, encoding);

        #region 向文本檔案的尾部追加内容

        /// 向文本檔案的尾部追加内容

        /// <param name="content">寫入的内容</param>

        public static void AppendText(string filePath, string content)

            File.AppendAllText(filePath, content);

        #region 将現有檔案的内容複制到新檔案中

        /// 将源檔案的内容複制到目标檔案中

        /// <param name="sourceFilePath">源檔案的絕對路徑</param>

        /// <param name="destFilePath">目标檔案的絕對路徑</param>

        public static void Copy(string sourceFilePath, string destFilePath)

            File.Copy(sourceFilePath, destFilePath, true);

        #region 将檔案移動到指定目錄

        /// 将檔案移動到指定目錄

        /// <param name="sourceFilePath">需要移動的源檔案的絕對路徑</param>

        /// <param name="descDirectoryPath">移動到的目錄的絕對路徑</param>

        public static void Move(string sourceFilePath, string descDirectoryPath)

            //擷取源檔案的名稱

            string sourceFileName = GetFileName(sourceFilePath);

            if (IsExistDirectory(descDirectoryPath))

                //如果目标中存在同名檔案,則删除

                if (IsExistFile(descDirectoryPath + "\\" + sourceFileName))

                    DeleteFile(descDirectoryPath + "\\" + sourceFileName);

                //将檔案移動到指定目錄

                File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFileName);

        #region 從檔案的絕對路徑中擷取檔案名( 不包含擴充名 )

        /// 從檔案的絕對路徑中擷取檔案名( 不包含擴充名 )

        public static string GetFileNameNoExtension(string filePath)

            return fi.Name.Split('.')[0];

        #region 從檔案的絕對路徑中擷取擴充名

        /// 從檔案的絕對路徑中擷取擴充名

        public static string GetExtension(string filePath)

            return fi.Extension;

        #region 清空指定目錄

        /// 清空指定目錄下所有檔案及子目錄,但該目錄依然儲存.

        public static void ClearDirectory(string directoryPath)

            if (IsExistDirectory(directoryPath))

                //删除目錄中所有的檔案

                for (int i = 0; i < fileNames.Length; i++)

                    DeleteFile(fileNames[i]);

                //删除目錄中所有的子目錄

                for (int i = 0; i < directoryNames.Length; i++)

                    DeleteDirectory(directoryNames[i]);

        #region 清空檔案内容

        /// 清空檔案内容

        public static void ClearFile(string filePath)

            //删除檔案

            File.Delete(filePath);

            //重新建立該檔案

            CreateFile(filePath);

        #region 删除指定目錄

        /// 删除指定目錄及其所有子目錄

        public static void DeleteDirectory(string directoryPath)

                Directory.Delete(directoryPath, true);

    }

}

上一篇: jsHelper