版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、/* 該類是從最新寫的一個FTP軟件中抽取出來的,覺得比較有用,所以拿出來供大家分享。* .NET已經(jīng)封裝了很多用于文件操作的類,在System.IO命名空間中,但該命名空間中的* 類在執(zhí)行文件操作時(如刪除、復(fù)制)因為沒有配套的UI元素,所以只適合后臺執(zhí)行文件操作。* 微軟在.NET 2.0中又增加了Microsoft.VisualBasic.FileIO命名空間??臻g中的FileSystem類* 可以提供大部分帶有UI元素的文件操作,包括刪除到回收站的彈窗提示,復(fù)制文件進度框等等。* 但是仍不能滿足我們所有的要求,比如同時將多個文件移動到回收站的彈窗提示。* * FileOperatePr
2、oxy直接使用Windows API,實現(xiàn)帶有彈窗提示的文件操作。各函數(shù)功能詳見注釋*/于北京海淀區(qū)東升科技園內(nèi)。3/9/2012 YJWangusing System;using System.Runtime.InteropServices;using System.IO;namespace FTPComponent/ / 文件操作代理,該類提供類似于Windows的文件操作體驗,Designed by YJWang 2/20/2012/ public class FileOperateProxy#region 【內(nèi)部類型定義】private struct SHFILEOPSTRUCTpub
3、lic IntPtr hwnd; /父窗口句柄 public wFunc wFunc; /要執(zhí)行的動作 public string pFrom; /源文件路徑,可以是多個文件,以結(jié)尾符號"0"結(jié)束public string pTo; /目標路徑,可以是路徑或文件名 public FILEOP_FLAGS fFlags; /標志,附加選項 public bool fAnyOperationsAborted; /是否可被中斷 public IntPtr hNameMappings; /文件映射名字,可在其它 Shell 函數(shù)中使用 public string lpszProgr
4、essTitle; / 只在 FOF_SIMPLEPROGRESS 時,指定對話框的標題。private enum wFuncFO_MOVE = 0x0001, /移動文件FO_COPY = 0x0002, /復(fù)制文件FO_DELETE = 0x0003, /刪除文件,只是用pFromFO_RENAME = 0x0004 /文件重命名private enum FILEOP_FLAGSFOF_MULTIDESTFILES = 0x0001, /pTo 指定了多個目標文件,而不是單個目錄FOF_CONFIRMMOUSE = 0x0002,FOF_SILENT = 0x0044, / 不顯示一個進度
5、對話框FOF_RENAMEONCOLLISION = 0x0008, / 碰到有抵觸的名字時,自動分配前綴FOF_NOCONFIRMATION = 0x10, / 不對用戶顯示提示FOF_WANTMAPPINGHANDLE = 0x0020, / 填充 hNameMappings 字段,必須使用 SHFreeNameMappings 釋放FOF_ALLOWUNDO = 0x40, / 允許撤銷FOF_FILESONLY = 0x0080, / 使用 *.* 時, 只對文件操作FOF_SIMPLEPROGRESS = 0x0100, / 簡單進度條,意味者不顯示文件名。FOF_NOCONFIRM
6、MKDIR = 0x0200, / 建新目錄時不需要用戶確定FOF_NOERRORUI = 0x0400, / 不顯示出錯用戶界面FOF_NOCOPYSECURITYATTRIBS = 0x0800, / 不復(fù)制 NT 文件的安全屬性FOF_NORECURSION = 0x1000 / 不遞歸目錄#endregion 【內(nèi)部類型定義】#region 【DllImport】DllImport("shell32.dll"private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp;#endregion
7、 【DllImport】#region 【刪除文件操作】/ / 刪除單個文件。/ / 刪除的文件名/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框,true-顯示,false-不顯示。該參數(shù)當指定永久刪除文件時有效/ 反饋錯誤消息的字符串/ 操作執(zhí)行結(jié)果標識,刪除文件成功返回0,否則,返回錯誤代碼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;/ / 刪除一組文件。/ / 字符串數(shù)組,表示一組文件名/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認對話框,true-顯示確認刪除
9、對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框,true-顯示,false-不顯示。該參數(shù)當指定永久刪除文件時有效/ 反饋錯誤消息的字符串/ 操作執(zhí)行結(jié)果標識,刪除文件成功返回0,否則,返回錯誤代碼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 【移動文件操作】/ / 移動一個文件到指定路徑下/ / 要移動的文件名/ 移動到的目的路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示
11、當文件名重復(fù)時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼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;/ / 移動一組文件到指定的路徑下/ / 要移動的文件名數(shù)組/ 移動到的目的路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復(fù)時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的
13、標識,成功返回0,失敗返回錯誤代碼,-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 【移動文件操作】#region 【復(fù)制文件操作】/ / 復(fù)制一個文件到指定的文件名或路徑/ / 要復(fù)制的文件名/ 復(fù)制到的目的文件名或路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對
15、話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復(fù)時,是否自動為新文件加上后綴名/ 返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-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ù)制到的目的路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文
17、件名重復(fù)時,是否自動為新文件加上后綴名/ 返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-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 【重命名文件】/ / 重命名一個文件為新名稱,建議您使用更方便的Microsoft.Visu
19、alBasic.FileSystem.ReName(;替換該方法/ / 要復(fù)制的文件名/ 復(fù)制到的目的文件名或路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼,-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è)定不顯示提示對話框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 【重命名文件】/ / 刪除單個或多個文件。/ / 刪除的文件名,如果是多個文件,文件名之間以字符串結(jié)尾符'0'隔開/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框,true-顯示,false-不顯示。該參數(shù)當指定永久刪除文件時有效/ 反饋錯誤消息的字符串/ 操作執(zhí)行結(jié)果標識,刪除文件成功返回0,否則,返回錯誤代碼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è)定不顯示提示對話框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設(shè)定不顯示進度對話框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp =
25、 GetErrorString(n;/.av 文件正常刪除了但也提示 402 錯誤,不知道為什么。屏蔽之。if (fileName.ToLower(.EndsWith(".av" && n.ToString("X" = "402"return 0;errorMsg = string.Format(0(1, tmp, fileName;return n;/ / 移動或復(fù)制一個或多個文件到指定路徑下/ / 操作類型,是移動操作還是復(fù)制操作/ 要移動或復(fù)制的文件名,如果是多個文件,文件名之間以字符串結(jié)尾符'0'
26、;隔開/ 移動到的目的位置/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復(fù)時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的標識,成功返回0,失敗返回錯誤代碼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、要時可以直接創(chuàng)建路徑if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設(shè)定不顯示提示對話框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設(shè)定不顯示進度對話框if (autoRenamelpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION; /自動為重名文件添加名稱后綴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;/ / 獲取一個文件的全名
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同協(xié)議網(wǎng)絡(luò)廣告協(xié)議
- 借款延期合同
- 借款合同借款合同范文
- 《深入解析HTTP協(xié)議》課件
- 金錢與期刊:媒體禁制令及一稿多投禁制
- 區(qū)塊鏈共識機制與改進算法研究進展
- 生長因子促進膝軟骨再生:研究熱點的文獻計量學(xué)分析
- 基于機器視覺的智能車系統(tǒng)設(shè)計
- 考慮失效相關(guān)性的無人機飛控系統(tǒng)可靠性分配與預(yù)計
- 基于藍牙的LBS系統(tǒng)攻擊檢測方法研究
- (一模)寧波市2024學(xué)年第一學(xué)期高考模擬考試 數(shù)學(xué)試卷(含答案)
- 父母贈與子女農(nóng)村土地協(xié)議書范本
- 集團母子公司協(xié)議書
- 中醫(yī)病證診斷療效標準
- 南安市第三次全國文物普查不可移動文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- ITSMS-D-038 問題記錄表范本
- 第1課+古代亞非(教學(xué)設(shè)計)【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 新教科版六年級下冊科學(xué)全冊教案
- 物業(yè)客服管家的培訓(xùn)課件
- 2024年房地產(chǎn)行業(yè)的樓市調(diào)控政策解讀培訓(xùn)
- 《統(tǒng)計學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時間序列分析和預(yù)測
評論
0/150
提交評論