|
事情的經(jīng)過是這樣子的!數(shù)據(jù)庫A表添加一條記錄,**系統(tǒng)中B目錄下就會(huì)多出5n個(gè)文件。隨著系統(tǒng)運(yùn)行3年多,B目錄中的文件數(shù)已高達(dá)2M多,而這些文件恰恰又是用戶高度頻繁訪問的。于是問題就來了,一方面是用戶訪問文件速度變慢了;另一方面是文件太多,很難維護(hù)。
怎么辦呢?思許良久,發(fā)現(xiàn)A表中有個(gè)錄入時(shí)間字段是不會(huì)變更的。如果截取錄入時(shí)間的年份+月份組成,用來創(chuàng)建B目錄下的子目錄名,把當(dāng)年當(dāng)月新增的文件統(tǒng)一歸檔于該子目錄下,不就可以嗎?新增的文件好處理,可對于舊文件歸檔需要費(fèi)點(diǎn)周折,因?yàn)槲募眠w移到新的子目錄里。
下面是關(guān)于文件遷移的主要代碼:
static void Main(string[] args){ string paperPath = ConfigurationManager.AppSettings["PaperBuildPath"]; Console.WriteLine(string.Format("試卷目錄:{0}", paperPath)); Console.WriteLine(); Console.WriteLine("目錄是否正確? 正確請按任意鍵......"); Console.WriteLine(); Console.ReadKey(); string[] files = Directory.GetFiles(paperPath); int num = 0; PublicExam[] list = Gateway.Default.FindArray<PublicExam(); foreach (PublicExam publicExam in list) { foreach (string file in files) { //源文件名(去除路徑后) string fileName = file.Split('//').Last(); if (fileName.StartsWith(publicExam.FGuid.ToString(), StringComparison.CurrentCultureIgnoreCase)) { //目標(biāo)文件夾 string destFilePath = paperPath + publicExam.FInputTime.ToString("yyyyMM"); if (Directory.Exists(destFilePath) == false) Directory.CreateDirectory(destFilePath); //目標(biāo)文件名 string destFileName = destFilePath + "http://" + fileName; if (File.Exists(destFileName)) File.Delete(destFileName); Console.WriteLine(string.Format("正在遷移文件:{0}", fileName)); //遷移文件 File.Move(file, destFileName); num++; } } } Console.WriteLine(); Console.WriteLine(string.Format("共遷移{0}個(gè)文件,請按任意鍵退出......", num)); Console.ReadKey();}
it知識庫:數(shù)據(jù)庫中海量文件的批量轉(zhuǎn)移方法,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。