2011-02-04 60 views
1

我有我的代碼問題我可以得到它複製目錄中的所有文件,它的子目錄,我有一個if語句告訴它複製文件如果修改日期與今天相同,但它仍然複製了我在互聯網上搜索的所有文件以獲得解決方案,並且它們都提出了與我已經擁有的doe類似的含糊答案,我粘貼了下面的代碼。我怎樣才能複製一個具有特定日期的文件在c#

DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath); 
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath); 

DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath); 
FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories); 
foreach (FileInfo fi in fis) 
{ 
    if (fi.LastWriteTime.Date == DateTime.Today.Date) 
    { 
     FileInfo[] sourceFiles = source.GetFiles("*", SearchOption.AllDirectories); 
     foreach (FileInfo fc in sourceFiles) 
      if (fc.LastWriteTime.Date == DateTime.Today.Date) 
       for (int i = 0; i < sourceFiles.Length; ++i) 
        File.Copy(sourceFiles[i].FullName, target.FullName + "\\" + sourceFiles[i].Name, true); 
    } 
} 

任何幫助將不勝感激

+1

你不是迭代兩次以上兩者在foreach源文件(FileInfo fi在fis)循環和foreach(FileInfo fc在sourceFiles中)循環? – sh54 2011-02-04 13:39:58

回答

3

它不應該是這樣嗎?

FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories); 
foreach (FileInfo fi in fis) 
{ 
    if (fi.LastWriteTime.Date == DateTime.Today.Date) 
    { 
     File.Copy(fi.FullName, target.FullName + "\\" + fi.Name, true); 
    } 
} 

的一點是,現在,無論何時你發現你滿足條件的文件,源文件夾中的所有文件複製到目標文件夾,這是不對的。你應該只複製你需要的文件。

上面的代碼只適用於根文件夾中的文件,但它也很容易使其適用於子文件夾。只需製作另一個函數即可查找文件夾中的所有子文件夾,並將每個子文件夾的代碼作爲參數調用。

+0

感謝真正幫助剛剛開始使用C#仍然不知道繩索,但實踐使完美。 – bobthemac 2011-02-04 13:44:07

+0

@bobthemac是的。一個建議的話,但;正確縮進並在需要時使用大括號。它會消除很多錯誤的來源,尤其是在開始時。無論如何,祝你好運與C#;我認爲這值得學習:)。 – alex 2011-02-04 13:46:04

0

我認爲你在if語句後缺少縮進或括號,如果後面跟着複製語句,我認爲它是空的。做

if (date == date) 
{ 
    filecopy 
} 
1

在FileSystem和.net上的DateTime的精度是不一樣的。

嘗試這樣:

if((Math.Abs((currentFile.LastWriteTime - DateTime.Today.Date).TotalMilliseconds) > tolerance){...} 
1

作爲替代方案,你可以使用LINQ查詢類似如下:

DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath); 
DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath); 

var files = source.GetFiles("*", SearchOption.AllDirectories).Where(file => file.LastWriteTime.Date.Equals(DateTime.Today.Date)); 
foreach (FileInfo file in files) 
    File.Copy(file.FullName, target.FullName + "\\" + file.Name, true); 
相關問題