




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、/* 該類是從最新寫的一個FTP軟件中抽取出來的,覺得比較有用,所以拿出來供大家分享。* .NET已經封裝了很多用于文件操作的類,在System.IO命名空間中,但該命名空間中的* 類在執(zhí)行文件操作時(如刪除、復制)因為沒有配套的UI元素,所以只適合后臺執(zhí)行文件操作。* 微軟在.NET 2.0中又增加了Microsoft.VisualBasic.FileIO命名空間。空間中的FileSystem類* 可以提供大部分帶有UI元素的文件操作,包括刪除到回收站的彈窗提示,復制文件進度框等等。* 但是仍不能滿足我們所有的要求,比如同時將多個文件移動到回收站的彈窗提示。* * FileOperatePr
2、oxy直接使用Windows API,實現(xiàn)帶有彈窗提示的文件操作。各函數(shù)功能詳見注釋*/于北京海淀區(qū)東升科技園內。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 【內部類型定義】private struct SHFILEOPSTRUCTpub
3、lic IntPtr hwnd; /父窗口句柄 public wFunc wFunc; /要執(zhí)行的動作 public string pFrom; /源文件路徑,可以是多個文件,以結尾符號"0"結束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, /復制文件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, / 不復制 NT 文件的安全屬性FOF_NORECURSION = 0x1000 / 不遞歸目錄#endregion 【內部類型定義】#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í)行結果標識,刪除文件成功返回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í)行結果標識,刪除文件成功返回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、當文件名重復時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的標識,成功返回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-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的
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 【復制文件操作】/ / 復制一個文件到指定的文件名或路徑/ / 要復制的文件名/ 復制到的目的文件名或路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對
15、話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復時,是否自動為新文件加上后綴名/ 返回移動操作是否成功的標識,成功返回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;/ / 復制一組文件到指定的路徑/ / 要復制的文件名數(shù)組/ 復制到的目的路徑/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文
17、件名重復時,是否自動為新文件加上后綴名/ 返回移動操作是否成功的標識,成功返回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 【復制文件操作】#region 【重命名文件】/ / 重命名一個文件為新名稱,建議您使用更方便的Microsoft.Visu
19、alBasic.FileSystem.ReName(;替換該方法/ / 要復制的文件名/ 復制到的目的文件名或路徑/ 指示是否顯示確認對話框,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" /將文件名以結尾字符"00"結束lpFileOp.pTo = GetFullName(destinationFileName + "00"lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERR
21、ORUI;if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設定不顯示提示對話框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 【重命名文件】/ / 刪除單個或多個文件。/ / 刪除的文件名,如果是多個文件,文件名之間以字符串結尾符'0'隔開/ 指示是將文件放入回收站還是永久刪除,true-放入回收站,false-永久刪除/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框,true-顯示,false-不顯示。該參數(shù)當指定永久刪除文件時有效/ 反饋錯誤消息的字符串/ 操作執(zhí)行結果標識,刪除文件成功返回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" /將文件名以結尾字符"0"結束lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;if (toRecyclelpFileOp.fF
24、lags |= FILEOP_FLAGS.FOF_ALLOWUNDO; /設定刪除到回收站if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /設定不顯示提示對話框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設定不顯示進度對話框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;/ / 移動或復制一個或多個文件到指定路徑下/ / 操作類型,是移動操作還是復制操作/ 要移動或復制的文件名,如果是多個文件,文件名之間以字符串結尾符'0'
26、;隔開/ 移動到的目的位置/ 指示是否顯示確認對話框,true-顯示確認刪除對話框,false-不顯示確認刪除對話框/ 指示是否顯示進度對話框/ 指示當文件名重復時,是否自動為新文件加上后綴名/ 反饋錯誤消息的字符串/ 返回移動操作是否成功的標識,成功返回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" /將文件名以結尾字符"00"結束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; /設定不顯示提示對話框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /設定不顯示進度對話框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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 親人兄弟和解協(xié)議書
- 聯(lián)誼學校共建協(xié)議書
- 中途暗股協(xié)議書模板
- 外賣委托協(xié)議書模板
- 聘用美術老師協(xié)議書
- 物業(yè)消防改造協(xié)議書
- 簽訂房產分割協(xié)議書
- 勞務協(xié)作計劃協(xié)議書
- 商場設備代管協(xié)議書
- 撞車諒解協(xié)議書范本
- 《經絡與腧穴》課件-手太陰肺經
- 人教版(2024)七年級下冊英語期中復習:Unit1~4+期中共5套學情調研檢測試卷(含答案)
- 中考化學主題復習(重慶)專題4綜合實驗的探究
- 專題01 富強與創(chuàng)新【考情透視+框架梳理+考點突破+題型歸納】道德與法治上學期期末高效復習資料
- 人力資源管理軟件采購協(xié)議
- 電動汽車充電樁項目投資商業(yè)計劃書范本
- 中國技能大賽-第45屆世界技能大賽全國選拔賽“水處理技術”項目技術工作文件
- 學校運動會目的
- 講解員禮儀培訓
- 臺風知識簡介(共29張課件)
- 音樂鑒賞與實踐 第一單元第四課音樂的力量(下)
評論
0/150
提交評論