亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現的文件操作封裝類完整實例【刪除,移動,復制,重命名】

2019-10-29 21:12:38
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現的文件操作封裝類。分享給大家供大家參考,具體如下:

最近發現群共享里面有個C# 文件操作封裝類,其方法是調用Windows API 來操作的文件的刪除、移動、復制重命名操作。下載下來一試,發現果然不錯,特在此記錄,以防丟失!

文件操作類代碼如下:

using System;using System.Runtime.InteropServices;using System.IO;namespace LxFile{  /// <summary>  /// 文件操作代理,該類提供類似于Windows的文件操作體驗  /// </summary>  public class FileOperateProxy  {    #region 【內部類型定義】    private struct SHFILEOPSTRUCT    {      public IntPtr hwnd;     //父窗口句柄      public wFunc wFunc;     //要執行的動作      public string pFrom;    //源文件路徑,可以是多個文件,以結尾符號"/0"結束      public string pTo;     //目標路徑,可以是路徑或文件名      public FILEOP_FLAGS fFlags;       //標志,附加選項      public bool fAnyOperationsAborted;   //是否可被中斷      public IntPtr hNameMappings;      //文件映射名字,可在其它 Shell 函數中使用      public string lpszProgressTitle;    // 只在 FOF_SIMPLEPROGRESS 時,指定對話框的標題。    }    private enum wFunc    {      FO_MOVE = 0x0001,  //移動文件      FO_COPY = 0x0002,  //復制文件      FO_DELETE = 0x0003, //刪除文件,只是用pFrom      FO_RENAME = 0x0004 //文件重命名    }    private enum FILEOP_FLAGS    {      FOF_MULTIDESTFILES = 0x0001,  //pTo 指定了多個目標文件,而不是單個目錄      FOF_CONFIRMMOUSE = 0x0002,      FOF_SILENT = 0x0044,      // 不顯示一個進度對話框      FOF_RENAMEONCOLLISION = 0x0008, // 碰到有抵觸的名字時,自動分配前綴      FOF_NOCONFIRMATION = 0x10,   // 不對用戶顯示提示      FOF_WANTMAPPINGHANDLE = 0x0020, // 填充 hNameMappings 字段,必須使用 SHFreeNameMappings 釋放      FOF_ALLOWUNDO = 0x40,      // 允許撤銷      FOF_FILESONLY = 0x0080,     // 使用 *.* 時, 只對文件操作      FOF_SIMPLEPROGRESS = 0x0100,  // 簡單進度條,意味者不顯示文件名。      FOF_NOCONFIRMMKDIR = 0x0200,  // 建新目錄時不需要用戶確定      FOF_NOERRORUI = 0x0400,     // 不顯示出錯用戶界面      FOF_NOCOPYSECURITYATTRIBS = 0x0800,   // 不復制 NT 文件的安全屬性      FOF_NORECURSION = 0x1000    // 不遞歸目錄    }    #endregion 【內部類型定義】    #region 【DllImport】    [DllImport("shell32.dll")]    private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);    #endregion 【DllImport】    #region 【刪除文件操作】    /// <summary>    /// 刪除單個文件。    /// </summary>    /// <param name="fileName">刪除的文件名</param>    /// <param name="toRecycle">指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框,true-顯示,false-不顯示。該參數當指定永久刪除文件時有效</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>操作執行結果標識,刪除文件成功返回0,否則,返回錯誤代碼</returns>    public static int DeleteFile(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)    {      try      {        string fName = GetFullName(fileName);        return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    /// <summary>    /// 刪除一組文件。    /// </summary>    /// <param name="fileNames">字符串數組,表示一組文件名</param>    /// <param name="toRecycle">指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框,true-顯示,false-不顯示。該參數當指定永久刪除文件時有效</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>操作執行結果標識,刪除文件成功返回0,否則,返回錯誤代碼</returns>    public static int DeleteFiles(string[] fileNames, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)    {      try      {        string fName = "";        foreach (string str in fileNames)        {          fName += GetFullName(str) + "/0";   //組件文件組字符串        }        return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    #endregion 【刪除文件操作】    #region 【移動文件操作】    /// <summary>    /// 移動一個文件到指定路徑下    /// </summary>    /// <param name="sourceFileName">要移動的文件名</param>    /// <param name="destinationPath">移動到的目的路徑</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框</param>    /// <param name="autoRename">指示當文件名重復時,是否自動為新文件加上后綴名</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼</returns>    public static int MoveFile(string sourceFileName, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)    {      try      {        string sfName = GetFullName(sourceFileName);        string dfName = GetFullName(destinationPath);        return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    /// <summary>    /// 移動一組文件到指定的路徑下    /// </summary>    /// <param name="sourceFileNames">要移動的文件名數組</param>    /// <param name="destinationPath">移動到的目的路徑</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框</param>    /// <param name="autoRename">指示當文件名重復時,是否自動為新文件加上后綴名</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-200:表示其他異常</returns>    public static int MoveFiles(string[] sourceFileNames, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)    {      try      {        string sfName = "";        foreach (string str in sourceFileNames)        {          sfName += GetFullName(str) + "/0";  //組件文件組字符串        }        string dfName = GetFullName(destinationPath);        return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    #endregion 【移動文件操作】    #region 【復制文件操作】    /// <summary>    /// 復制一個文件到指定的文件名或路徑    /// </summary>    /// <param name="sourceFileName">要復制的文件名</param>    /// <param name="destinationFileName">復制到的目的文件名或路徑</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框</param>    /// <param name="autoRename">指示當文件名重復時,是否自動為新文件加上后綴名</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-200:表示其他異常</returns>    public static int CopyFile(string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)    {      try      {        string sfName = GetFullName(sourceFileName);        string dfName = GetFullName(destinationFileName);        return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    /// <summary>    /// 復制一組文件到指定的路徑    /// </summary>    /// <param name="sourceFileNames">要復制的文件名數組</param>    /// <param name="destinationPath">復制到的目的路徑</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框</param>    /// <param name="autoRename">指示當文件名重復時,是否自動為新文件加上后綴名</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-200:表示其他異常</returns>    public static int CopyFiles(string[] sourceFileNames, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)    {      try      {        string sfName = "";        foreach (string str in sourceFileNames)        {          sfName += GetFullName(str) + "/0";   //組件文件組字符串        }        string dfName = GetFullName(destinationPath);        return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    #endregion 【復制文件操作】    #region 【重命名文件】    /// <summary>    /// 重命名一個文件為新名稱,建議您使用更方便的Microsoft.VisualBasic.FileSystem.ReName();替換該方法    /// </summary>    /// <param name="sourceFileName">要復制的文件名</param>    /// <param name="destinationFileName">復制到的目的文件名或路徑</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-200:表示其他異常</returns>    [Obsolete("建議使用 Microsoft.VisualBasic.FileSystem.ReName()方法")]    public static int ReNameFile(string sourceFileName, string destinationFileName, bool showDialog, ref string errorMsg)    {      try      {        SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();        lpFileOp.wFunc = wFunc.FO_RENAME;        lpFileOp.pFrom = GetFullName(sourceFileName) + "/0/0";     //將文件名以結尾字符"/0/0"結束        lpFileOp.pTo = GetFullName(destinationFileName) + "/0/0";        lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;        if (!showDialog)          lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;   //設定不顯示提示對話框        lpFileOp.fAnyOperationsAborted = true;        int n = SHFileOperation(ref lpFileOp);        if (n == 0)          return 0;        string tmp = GetErrorString(n);        errorMsg = string.Format("{0}({1})", tmp, sourceFileName);        return n;      }      catch (Exception ex)      {        errorMsg = ex.Message;        return -200;      }    }    /// <summary>    /// 利用Microsoft.VisualBasic.FileSystem.ReName()方法實現    /// </summary>    /// <param name="filePath"></param>    /// <param name="newFileName"></param>    public static void ReNameFile(string filePath, string newFileName)    {      try      {        string extensName = Path.GetExtension(filePath);        string newName = newFileName + extensName;        Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(filePath, newName);      }      catch (Exception ex)      {        throw ex;      }    }    #endregion 【重命名文件】    /// <summary>    /// 刪除單個或多個文件    /// </summary>    /// <param name="fileName">刪除的文件名,如果是多個文件,文件名之間以字符串結尾符'/0'隔開</param>    /// <param name="toRecycle">指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框,true-顯示,false-不顯示。該參數當指定永久刪除文件時有效</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>操作執行結果標識,刪除文件成功返回0,否則,返回錯誤代碼</returns>    private static int ToDelete(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg)    {      SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();      lpFileOp.wFunc = wFunc.FO_DELETE;      lpFileOp.pFrom = fileName + "/0";    //將文件名以結尾字符"/0"結束      lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;      if (toRecycle)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_ALLOWUNDO; //設定刪除到回收站      if (!showDialog)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;   //設定不顯示提示對話框      if (!showProgress)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT;   //設定不顯示進度對話框      lpFileOp.fAnyOperationsAborted = true;      int n = SHFileOperation(ref lpFileOp);      if (n == 0)        return 0;      string tmp = GetErrorString(n);      //.av 文件正常刪除了但也提示 402 錯誤,不知道為什么。屏蔽之。      if ((fileName.ToLower().EndsWith(".av") && n.ToString("X") == "402"))        return 0;      errorMsg = string.Format("{0}({1})", tmp, fileName);      return n;    }    /// <summary>    /// 移動或復制一個或多個文件到指定路徑下    /// </summary>    /// <param name="flag">操作類型,是移動操作還是復制操作</param>    /// <param name="sourceFileName">要移動或復制的文件名,如果是多個文件,文件名之間以字符串結尾符'/0'隔開</param>    /// <param name="destinationFileName">移動到的目的位置</param>    /// <param name="showDialog">指示是否顯示確認對話框,true-顯示確認對話框,false-不顯示確認對話框</param>    /// <param name="showProgress">指示是否顯示進度對話框</param>    /// <param name="autoRename">指示當文件名重復時,是否自動為新文件加上后綴名</param>    /// <param name="errorMsg">反饋錯誤消息的字符串</param>    /// <returns>返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼</returns>    private static int ToMoveOrCopy(wFunc flag, string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg)    {      SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();      lpFileOp.wFunc = flag;      lpFileOp.pFrom = sourceFileName + "/0";     //將文件名以結尾字符"/0/0"結束      lpFileOp.pTo = destinationFileName + "/0/0";      lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;      lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMMKDIR; //指定在需要時可以直接創建路徑      if (!showDialog)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION;   //設定不顯示提示對話框      if (!showProgress)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT;   //設定不顯示進度對話框      if (autoRename)        lpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION; //自動為重名文件添加名稱后綴      lpFileOp.fAnyOperationsAborted = true;      int n = SHFileOperation(ref lpFileOp);      if (n == 0)        return 0;      string tmp = GetErrorString(n);      errorMsg = string.Format("{0}({1})", tmp, sourceFileName);      return n;    }    /// <summary>    /// 獲取一個文件的全名    /// </summary>    /// <param name="fileName">文件名</param>    /// <returns>返回生成文件的完整路徑名</returns>    private static string GetFullName(string fileName)    {      FileInfo fi = new FileInfo(fileName);      return fi.FullName;    }    /// <summary>    /// 解釋錯誤代碼    /// </summary>    /// <param name="n">代碼號</param>    /// <returns>返回關于錯誤代碼的文字描述</returns>    private static string GetErrorString(int n)    {      if (n == 0) return string.Empty;      switch (n)      {        case 2:          return "系統找不到指定的文件。";        case 7:          return "存儲控制塊被銷毀。您是否選擇的“取消”操作?";        case 113:          return "文件已存在!";        case 115:          return "重命名文件操作,原始文件和目標文件必須具有相同的路徑名。不能使用相對路徑。";        case 117:          return "I/O控制錯誤";        case 123:          return "指定了重復的文件名";        case 116:          return "The source is a root directory, which cannot be moved or renamed.";        case 118:          return "Security settings denied access to the source.";        case 124:          return "The path in the source or destination or both was invalid.";        case 65536:          return "An unspecified error occurred on the destination.";        case 1026:          return "在試圖移動或拷貝一個不存在的文件.";        case 1223:          return "操作被取消!";        default:          return "未識別的錯誤代碼:" + n;      }    }  }}

附:完整實例代碼點擊此處本站下載。

希望本文所述對大家C#程序設計有所幫助。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩**中文字幕毛片| 欧美电影在线观看网站| yellow中文字幕久久| 欧美福利在线观看| 国产精品va在线播放| 欧美激情第1页| 黑丝美女久久久| 国产日韩在线亚洲字幕中文| 久久精品国产精品亚洲| 成人xvideos免费视频| 国产日韩欧美综合| 国产一区二中文字幕在线看| 久久精品成人一区二区三区| 国产在线观看91精品一区| 国产精品美女无圣光视频| 国产精品国产三级国产aⅴ浪潮| 欧美电影免费观看网站| 欧美电影免费在线观看| 欧美有码在线观看视频| 亚洲字幕一区二区| 国产精品久久久久久久久影视| 国产剧情久久久久久| 97国产suv精品一区二区62| 亚洲国产精品va在看黑人| 国产成人一区二区三区| 久久精品人人做人人爽| 91视频8mav| 亚洲毛片在线观看.| 中日韩美女免费视频网站在线观看| 亚洲国产欧美在线成人app| 日韩精品在线私人| 欧美日产国产成人免费图片| 亚洲a区在线视频| 国产视频在线观看一区二区| 亚洲欧美日韩直播| 亚洲人成电影在线播放| 91久久国产综合久久91精品网站| 国产精品高清免费在线观看| 亚洲欧美999| 久久久久久高潮国产精品视| 日av在线播放中文不卡| 亚洲国内精品在线| 久久精品国产欧美激情| 91探花福利精品国产自产在线| 国产91色在线播放| 国产视频精品久久久| 精品国偷自产在线视频| 日韩在线国产精品| 精品一区二区三区电影| 久久色免费在线视频| 亚洲黄色成人网| 日韩欧美福利视频| 91中文字幕一区| 欧美成年人视频网站| 91精品国产91久久久久| 国产精品香蕉国产| 96国产粉嫩美女| 亚洲一二三在线| 亚洲伊人成综合成人网| 国产精品女视频| 日韩在线视频二区| 91国产视频在线| 国产成人精品在线| 国产精品第一第二| 亚洲女同性videos| 欧美丝袜美女中出在线| 国产区精品视频| 免费av在线一区| 亚洲电影免费观看高清完整版在线| 欧美日韩精品在线播放| 欧美另类极品videosbest最新版本| www.亚洲免费视频| 亚洲精品动漫100p| 精品无人国产偷自产在线| 国产精品2018| 中文字幕日韩欧美精品在线观看| 国产一区二区三区在线观看网站| 青青a在线精品免费观看| 亚洲福利影片在线| 日韩在线观看免费高清完整版| 一本大道香蕉久在线播放29| 国产一区二区三区在线| 国产一区二区三区三区在线观看| 国产成人综合av| 欧美在线亚洲一区| 狠狠色狠狠色综合日日五| 久久伊人91精品综合网站| 日韩精品在线免费| 成人网址在线观看| 亚洲精品99久久久久| 亚洲精品视频播放| 国产精品69久久| 亚洲精品国精品久久99热一| 亚洲v日韩v综合v精品v| 成人淫片在线看| 久久久国产成人精品| 亚洲国产精品中文| 亚洲欧美国产精品va在线观看| 亚洲性生活视频在线观看| 久久激情五月丁香伊人| 欧美性xxxx极品hd欧美风情| 日韩有码在线观看| 国产精品99免视看9| 中文字幕亚洲激情| 亚洲开心激情网| 日韩一区二区三区国产| 欧美丝袜一区二区三区| 国产精品中文字幕久久久| 国产极品精品在线观看| 国产在线观看不卡| 日韩少妇与小伙激情| 亚洲成人av在线播放| 亚洲一区二区三区视频| 一本色道久久88综合亚洲精品ⅰ| 欧美大片在线看免费观看| 性欧美xxxx视频在线观看| 国产欧美日韩高清| 国产精品日日摸夜夜添夜夜av| 日韩欧美在线免费| 欧美黑人视频一区| 亚洲精品久久久久久下一站| 黑人极品videos精品欧美裸| 久久av红桃一区二区小说| 亚洲在线观看视频| 久久国产精品久久国产精品| 国产欧美精品一区二区| 91深夜福利视频| 亚洲在线观看视频网站| 狠狠躁夜夜躁人人爽超碰91| 欧美视频国产精品| 久久免费视频在线观看| 国语自产精品视频在免费| 97色在线播放视频| 97香蕉久久超级碰碰高清版| 亚洲伊人久久大香线蕉av| 热久久视久久精品18亚洲精品| 成人美女免费网站视频| 日韩成人在线视频| 国产亚洲精品久久久久久牛牛| 亚洲第一色中文字幕| 国产精品极品在线| 久久精品国产一区二区三区| 久久久久这里只有精品| 亚洲欧洲在线免费| 欧美一区二粉嫩精品国产一线天| 久久久久久成人| 亚洲色图狂野欧美| 欧美理论片在线观看| 尤物精品国产第一福利三区| 亚洲精品国产品国语在线| 91丝袜美腿美女视频网站| 中文字幕日韩av电影| 国产视频自拍一区| 亚洲国产一区二区三区在线观看| 亚洲欧美国产va在线影院| 久久久91精品国产一区不卡| 欧美另类99xxxxx| 亚洲免费一级电影| 久久精品久久精品亚洲人| 国产成+人+综合+亚洲欧美丁香花| 精品自拍视频在线观看| 欧美激情精品久久久久久大尺度| 亚洲品质视频自拍网| 美女久久久久久久|