2016-03-07 77 views
0

我有兩個文件夾,我已經寫了一個C#代碼將文件從源文件夾複製到目標文件夾。我想要逐一複製這些文件,並且還想更改目標文件夾中複製文件的名稱。問題是,如何知道哪些文件已被複制?如何知道哪些文件已經從源文件夾複製到目標文件夾?

我不想使用散列碼,因爲如果我在源文件夾中有超過一百萬個文件,這將非常耗時。這將不必檢查目標文件夾中存在的所有文件的哈希碼。這會影響性能。 另外還有一個限制,我無法更改源文件夾中存在的文件的任何元數據。 有誰知道更好的解決方案?

+0

好,如果你不能使用檢查文件名的明顯的解決方案,你可以不仔細檢查文件大小,你不會留下很多選擇。 – user1666620

+1

複製的文件名與原始文件名相關的方式如何? – ChrisF

+0

你的意思是由另一個程序/或在資源管理器中的用戶複製?或只有通過「複製」程序的這個實例? – counterflux

回答

0

您是否擔心如果您的複製作業中斷,那麼您將不知道哪些文件已被複制?一個簡單的方法可能是在表格中跟蹤這些信息,這些表格可以有各種形式,從簡單文件,XML文件,JSON文件到數據庫中的表格等等。它可以是最基本的:

D:\files\file1.dat E:\files\newName1.dat 1 
D:\files\file2.dat E:\files\newName2.dat 0 
D:\files\file3.dat E:\files\newName3.dat 0 
D:\files\file4.dat E:\files\newName4.dat 1 

第一項是原始文件,第二項是目標文件(你提到名字的變化),第三項是文件是否已成功複製。我會預先填寫這張表,這樣如果你的工作重新開始,它所要做的就是從這個文件中讀取,而不是從目錄中獲取所有的文件名。

一旦你恢復了你的複製工作,你可以簡單地加載文件並複製最後一個條目爲0的文件。

如果你將它保存在一個基本的文本文件,加載它可以像基本的:

var files = File.ReadLines(filePath) 
       .Select(line => line.Split(' ')) 
       .Where(entry => entry[2].Equals("0")); 
+0

謝謝Bk。我知道數據庫將是最好的選擇。但是如果我不能使用數據庫呢?我應該只通過文件瀏覽器進行檢查。 – Divya

+0

@ user3195546總是有一個文件數據庫,比如SQLite。不需要任何安裝;它只是一個文件。如果你不能走這條路線,那麼我會使用一個文本文件。您將記錄該數據的格式將取決於您的偏好...可以是JSON,XML,上面顯示的純文本或您喜歡的任何其他格式。我上面顯示的代碼只是處理純文本文件。它應該運作良好。這當然都假設你不能做內存一次性交易。如果可以的話,那麼你不需要這些。只需循環訪問您的文件並用新名稱複製它們即可。 –

相關問題