C# 刪除移動(dòng)文件(附帶彈窗和進(jìn)度提示)_第1頁(yè)
C# 刪除移動(dòng)文件(附帶彈窗和進(jìn)度提示)_第2頁(yè)
C# 刪除移動(dòng)文件(附帶彈窗和進(jìn)度提示)_第3頁(yè)
C# 刪除移動(dòng)文件(附帶彈窗和進(jìn)度提示)_第4頁(yè)
C# 刪除移動(dòng)文件(附帶彈窗和進(jìn)度提示)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/* 該類(lèi)是從最新寫(xiě)的一個(gè)FTP軟件中抽取出來(lái)的,覺(jué)得比較有用,所以拿出來(lái)供大家分享。* .NET已經(jīng)封裝了很多用于文件操作的類(lèi),在System.IO命名空間中,但該命名空間中的* 類(lèi)在執(zhí)行文件操作時(shí)(如刪除、復(fù)制)因?yàn)闆](méi)有配套的UI元素,所以只適合后臺(tái)執(zhí)行文件操作。* 微軟在.NET 2.0中又增加了Microsoft.VisualBasic.FileIO命名空間。空間中的FileSystem類(lèi)* 可以提供大部分帶有UI元素的文件操作,包括刪除到回收站的彈窗提示,復(fù)制文件進(jìn)度框等等。* 但是仍不能滿(mǎn)足我們所有的要求,比如同時(shí)將多個(gè)文件移動(dòng)到回收站的彈窗提示。* * FileOperatePr

2、oxy直接使用Windows API,實(shí)現(xiàn)帶有彈窗提示的文件操作。各函數(shù)功能詳見(jiàn)注釋*/于北京海淀區(qū)東升科技園內(nèi)。3/9/2012 YJWangusing System;using System.Runtime.InteropServices;using System.IO;namespace FTPComponent/ / 文件操作代理,該類(lèi)提供類(lèi)似于Windows的文件操作體驗(yàn),Designed by YJWang 2/20/2012/ public class FileOperateProxy#region 【內(nèi)部類(lèi)型定義】private struct SHFILEOPSTRUCTpub

3、lic IntPtr hwnd; /父窗口句柄 public wFunc wFunc; /要執(zhí)行的動(dòng)作 public string pFrom; /源文件路徑,可以是多個(gè)文件,以結(jié)尾符號(hào)"0"結(jié)束public string pTo; /目標(biāo)路徑,可以是路徑或文件名 public FILEOP_FLAGS fFlags; /標(biāo)志,附加選項(xiàng) public bool fAnyOperationsAborted; /是否可被中斷 public IntPtr hNameMappings; /文件映射名字,可在其它 Shell 函數(shù)中使用 public string lpszProgr

4、essTitle; / 只在 FOF_SIMPLEPROGRESS 時(shí),指定對(duì)話(huà)框的標(biāo)題。private enum wFuncFO_MOVE = 0x0001, /移動(dòng)文件FO_COPY = 0x0002, /復(fù)制文件FO_DELETE = 0x0003, /刪除文件,只是用pFromFO_RENAME = 0x0004 /文件重命名private enum FILEOP_FLAGSFOF_MULTIDESTFILES = 0x0001, /pTo 指定了多個(gè)目標(biāo)文件,而不是單個(gè)目錄FOF_CONFIRMMOUSE = 0x0002,FOF_SILENT = 0x0044, / 不顯示一個(gè)進(jìn)度

5、對(duì)話(huà)框FOF_RENAMEONCOLLISION = 0x0008, / 碰到有抵觸的名字時(shí),自動(dòng)分配前綴FOF_NOCONFIRMATION = 0x10, / 不對(duì)用戶(hù)顯示提示FOF_WANTMAPPINGHANDLE = 0x0020, / 填充 hNameMappings 字段,必須使用 SHFreeNameMappings 釋放FOF_ALLOWUNDO = 0x40, / 允許撤銷(xiāo)FOF_FILESONLY = 0x0080, / 使用 *.* 時(shí), 只對(duì)文件操作FOF_SIMPLEPROGRESS = 0x0100, / 簡(jiǎn)單進(jìn)度條,意味者不顯示文件名。FOF_NOCONFIRM

6、MKDIR = 0x0200, / 建新目錄時(shí)不需要用戶(hù)確定FOF_NOERRORUI = 0x0400, / 不顯示出錯(cuò)用戶(hù)界面FOF_NOCOPYSECURITYATTRIBS = 0x0800, / 不復(fù)制 NT 文件的安全屬性FOF_NORECURSION = 0x1000 / 不遞歸目錄#endregion 【內(nèi)部類(lèi)型定義】#region 【DllImport】DllImport("shell32.dll"private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp;#endregion

7、 【DllImport】#region 【刪除文件操作】/ / 刪除單個(gè)文件。/ / 刪除的文件名/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框,true-顯示,false-不顯示。該參數(shù)當(dāng)指定永久刪除文件時(shí)有效/ 反饋錯(cuò)誤消息的字符串/ 操作執(zhí)行結(jié)果標(biāo)識(shí),刪除文件成功返回0,否則,返回錯(cuò)誤代碼public static int DeleteFile(string fileName, bool toRecycle, bool showDialo

8、g, bool showProgress, ref string errorMsgtrystring fName = GetFullName(fileName;return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 刪除一組文件。/ / 字符串?dāng)?shù)組,表示一組文件名/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除

9、對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框,true-顯示,false-不顯示。該參數(shù)當(dāng)指定永久刪除文件時(shí)有效/ 反饋錯(cuò)誤消息的字符串/ 操作執(zhí)行結(jié)果標(biāo)識(shí),刪除文件成功返回0,否則,返回錯(cuò)誤代碼public static int DeleteFiles(string fileNames, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsgtrystring fName = ""foreach (string str in fileNamesfName += G

10、etFullName(str + "0" /組件文件組字符串return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【刪除文件操作】#region 【移動(dòng)文件操作】/ / 移動(dòng)一個(gè)文件到指定路徑下/ / 要移動(dòng)的文件名/ 移動(dòng)到的目的路徑/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框/ 指示

11、當(dāng)文件名重復(fù)時(shí),是否自動(dòng)為新文件加上后綴名/ 反饋錯(cuò)誤消息的字符串/ 返回移動(dòng)操作是否成功的標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼public static int MoveFile(string sourceFileName, string destinationPath, bool showDialog,bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = GetFullName(sourceFileName;string dfName = GetFullName(destinationPath;ret

12、urn ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 移動(dòng)一組文件到指定的路徑下/ / 要移動(dòng)的文件名數(shù)組/ 移動(dòng)到的目的路徑/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框/ 指示當(dāng)文件名重復(fù)時(shí),是否自動(dòng)為新文件加上后綴名/ 反饋錯(cuò)誤消息的字符串/ 返回移動(dòng)操作是否成功的

13、標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼,-200:表示其他異常public static int MoveFiles(string sourceFileNames, string destinationPath, bool showDialog,bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = ""foreach (string str in sourceFileNamessfName += GetFullName(str + "0" /組件文件組字符串strin

14、g dfName = GetFullName(destinationPath;return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【移動(dòng)文件操作】#region 【復(fù)制文件操作】/ / 復(fù)制一個(gè)文件到指定的文件名或路徑/ / 要復(fù)制的文件名/ 復(fù)制到的目的文件名或路徑/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)

15、話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框/ 指示當(dāng)文件名重復(fù)時(shí),是否自動(dòng)為新文件加上后綴名/ 返回移動(dòng)操作是否成功的標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼,-200:表示其他異常public static int CopyFile(string sourceFileName, string destinationFileName, bool showDialog, bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = GetFullName(sourceFileName;string

16、 dfName = GetFullName(destinationFileName;return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 復(fù)制一組文件到指定的路徑/ / 要復(fù)制的文件名數(shù)組/ 復(fù)制到的目的路徑/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框/ 指示當(dāng)文

17、件名重復(fù)時(shí),是否自動(dòng)為新文件加上后綴名/ 返回移動(dòng)操作是否成功的標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼,-200:表示其他異常public static int CopyFiles(string sourceFileNames, string destinationPath, bool showDialog, bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = ""foreach (string str in sourceFileNamessfName += GetFullName(s

18、tr + "0" /組件文件組字符串string dfName = GetFullName(destinationPath;return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【復(fù)制文件操作】#region 【重命名文件】/ / 重命名一個(gè)文件為新名稱(chēng),建議您使用更方便的Microsoft.Visu

19、alBasic.FileSystem.ReName(;替換該方法/ / 要復(fù)制的文件名/ 復(fù)制到的目的文件名或路徑/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 返回移動(dòng)操作是否成功的標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼,-200:表示其他異常Obsolete("建議使用 Microsoft.VisualBasic.FileSystem.ReName(方法"public static int ReNameFile(string sourceFileName, string destinationFileName, bool sho

20、wDialog, ref string errorMsgtrySHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = wFunc.FO_RENAME;lpFileOp.pFrom = GetFullName(sourceFileName + "00" /將文件名以結(jié)尾字符"00"結(jié)束lpFileOp.pTo = GetFullName(destinationFileName + "00"lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERR

21、ORUI;if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設(shè)定不顯示提示對(duì)話(huà)框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp = GetErrorString(n;errorMsg = string.Format(0(1, tmp, sourceFileName;return n;catch (Exception exerrorMsg = ex.Me

22、ssage;return -200;#endregion 【重命名文件】/ / 刪除單個(gè)或多個(gè)文件。/ / 刪除的文件名,如果是多個(gè)文件,文件名之間以字符串結(jié)尾符'0'隔開(kāi)/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框,true-顯示,false-不顯示。該參數(shù)當(dāng)指定永久刪除文件時(shí)有效/ 反饋錯(cuò)誤消息的字符串/ 操作執(zhí)行結(jié)果標(biāo)識(shí),刪除文件成功返回0,否則,返回錯(cuò)誤代碼private static int ToDelete(str

23、ing fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsgSHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = wFunc.FO_DELETE;lpFileOp.pFrom = fileName + "0" /將文件名以結(jié)尾字符"0"結(jié)束lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;if (toRecyclelpFileOp.fF

24、lags |= FILEOP_FLAGS.FOF_ALLOWUNDO; /設(shè)定刪除到回收站if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設(shè)定不顯示提示對(duì)話(huà)框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設(shè)定不顯示進(jìn)度對(duì)話(huà)框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp =

25、 GetErrorString(n;/.av 文件正常刪除了但也提示 402 錯(cuò)誤,不知道為什么。屏蔽之。if (fileName.ToLower(.EndsWith(".av" && n.ToString("X" = "402"return 0;errorMsg = string.Format(0(1, tmp, fileName;return n;/ / 移動(dòng)或復(fù)制一個(gè)或多個(gè)文件到指定路徑下/ / 操作類(lèi)型,是移動(dòng)操作還是復(fù)制操作/ 要移動(dòng)或復(fù)制的文件名,如果是多個(gè)文件,文件名之間以字符串結(jié)尾符'0'

26、;隔開(kāi)/ 移動(dòng)到的目的位置/ 指示是否顯示確認(rèn)對(duì)話(huà)框,true-顯示確認(rèn)刪除對(duì)話(huà)框,false-不顯示確認(rèn)刪除對(duì)話(huà)框/ 指示是否顯示進(jìn)度對(duì)話(huà)框/ 指示當(dāng)文件名重復(fù)時(shí),是否自動(dòng)為新文件加上后綴名/ 反饋錯(cuò)誤消息的字符串/ 返回移動(dòng)操作是否成功的標(biāo)識(shí),成功返回0,失敗返回錯(cuò)誤代碼private static int ToMoveOrCopy(wFunc flag, string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string err

27、orMsgSHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = flag;lpFileOp.pFrom = sourceFileName + "0" /將文件名以結(jié)尾字符"00"結(jié)束lpFileOp.pTo = destinationFileName + "00"lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMMKDIR; /指定在需

28、要時(shí)可以直接創(chuàng)建路徑if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設(shè)定不顯示提示對(duì)話(huà)框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設(shè)定不顯示進(jìn)度對(duì)話(huà)框if (autoRenamelpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION; /自動(dòng)為重名文件添加名稱(chēng)后綴lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp = GetErrorString(n;errorMsg = string.Format(0(1, tmp, sourceFileName;return n;/ / 獲取一個(gè)文件的全名

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論