版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025中國(guó)南水北調(diào)集團(tuán)中線(xiàn)限公司公開(kāi)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年陜西漢中市事業(yè)單位招聘工作人員66人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年湖北孝感市直部分事業(yè)單位招聘工作人員15人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年江蘇南京市技術(shù)創(chuàng)新服務(wù)中心招考1人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025下半年四川省瀘州市古藺縣事業(yè)單位招聘20人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年江蘇省揚(yáng)州市邗江區(qū)事業(yè)單位招聘64人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川省威遠(yuǎn)縣事業(yè)單位招聘37人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年四川南充市營(yíng)山縣事業(yè)單位招聘137人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025上半年事業(yè)單位聯(lián)考湖北招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 現(xiàn)金流管理的未來(lái)趨勢(shì)探討
- 《項(xiàng)目管理培訓(xùn)課程》課件
- 2024-2025學(xué)年八年級(jí)語(yǔ)文上學(xué)期期末真題復(fù)習(xí) 專(zhuān)題06 文言文閱讀
- 2024秋國(guó)開(kāi)《管理學(xué)基礎(chǔ)》形考任務(wù)(1234)試題及答案
- 叉車(chē)安全管理
- 制藥課程設(shè)計(jì)三廢處理
- 期末測(cè)試卷(試題)-2024-2025學(xué)年北師大版數(shù)學(xué)五年級(jí)上冊(cè)
- 考試安全保密培訓(xùn)
- 關(guān)于培訓(xùn)的課件
- 2024上海市房屋租賃合同范本下載
- 江蘇省揚(yáng)州市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- 2024年時(shí)事政治題庫(kù)附參考答案(綜合題)
評(píng)論
0/150
提交評(píng)論