最近因為公司圖文伺服器空間緊張,需要將備份目錄下的所有檔案按照目錄結構全部轉移,但是原位址的目錄結構保持不變,在網上搜尋無果的情況下,決定自己動手製作乙個;
ui畫面:
主要用到的命名空間:
using system.io;
步驟詳解:
1、迴圈來源目錄的所有目錄及檔案,重點取得需要轉移的檔案數,以便下一步初始化列舉數;
2、迴圈來源目錄的所有目錄,同時取得目錄數和檔案大小,並產生需要轉移的檔案列表string[列舉數];
3、依照檔案列表開執行緒建立目錄並轉移檔案(判斷是否覆蓋),計算轉移百分比;
4、這兩個是解決難點,方案兩種,一種同步刪除,但必須有順序,二、在轉移完成後再統一迴圈處理;我採取的是第二種,特別是刪除目錄時,必須保證目錄裡不存在任何檔案才能直接刪除;
關鍵程式碼:
1、file.copy(sourcefilename, destfilename, checkbox3.checked);
2、code
downthread
=new
thread(
newthreadstart(startupdate));
downthread.start();
private
void
startupdate()
if(m_files[i]
!=null)if
(file.exists(destfilename))
file.copy(sourcefilename, destfilename, checkbox3.checked);
}catch
try}
if(checkbox2.checked)}}
catch
debug.writeline(m_files[i]);
}b_f
=true;}
if(b_f)
//批量刪除目錄
if(m_files[i]
!=null)}
if(checkbox2.checked)}}
catch}}
}b_f
=false;}
}}catch
(exception ex)
//ui執行緒設定label屬性
begininvoke(
newsystem.eventhandler(updateui), lblstartexe);
begininvoke(
neweventhandler(onshowmessage),
"複製成功!");
}catch
(exception ex)
b_globalfinished
=true
;begininvoke(
newsystem.eventhandler(updateui), lblstartexe);
}code
private
void
updateui(
object
sender, eventargs e)
lblpathnum.text
=m_intpathscount.tostring() +"
個目錄"
;lblfilenum.text
=m_intfilescount.tostring() +"
個檔案"
;lbldownload.text ="
總計 "
+getfilesize(m_allfilesize) +""
;lblstartexe.text ="
已經複製 "+
getfilesize(m_downedfilesize) +""
;if(b_globalfinished)
}計算目錄檔案大小合計
public
void
allfilesize()
filesize +=(
int)fitemp.length ;
}m_allfilesize
=filesize;
directoryinfo ddi
=di.getdirectories();
foreach
(directoryinfo ditemp
inddi)
filesize
=filesallfilesize(filesize, ditemp.fullname);
}m_allfilesize
=filesize;
}public
intfilesallfilesize(
intfilesize,
string
nodeupdateserverpath)
filesize +=(
int)fitemp.length ;
}m_allfilesize
=filesize;
directoryinfo ddi
=di.getdirectories();
foreach
(directoryinfo ditemp
inddi)
filesize
=filesallfilesize(filesize, ditemp.fullname);
}m_allfilesize
=filesize;
return
filesize;
}
原創 檔案系統 目錄檔案快速複製轉移工具
最近因為公司圖文伺服器空間緊張,需要將備份目錄下的所有檔案按照目錄結構全部轉移,但是原位址的目錄結構保持不變,在網上搜尋無果的情況下,決定自己動手製作乙個 ui畫面 主要用到的命名空間 步驟詳解 1 迴圈來源目錄的所有目錄及檔案,重點取得需要轉移的檔案數,以便下一步初始化列舉數 2 迴圈來源目錄的所...
快速複製大檔案 多個檔案
之前寫過乙個copy檔案的方法,30多m要複製1分多鐘.想死,現在忘記了那個方法。只有下面這個方法 快速複製大檔案 多個檔案 包含資料夾 public static void copyfile file file,string dest private static void copy string...
利用TFileStream快速複製檔案
procedure copyfile sourcefile,destfile string varsf,df tfilestream begin sf tfilestream.create sourcefile,fmopenread 建立原始檔流 trydf tfilestream.create d...