所以我一直在構建一個可重用的類,它會處理遞歸和拷貝目錄一,到另一個目錄。的文件夾結構是:遞歸到無窮遠,沒有準備好
- 根(
D:\Arrigotti
) - 源(
C:\inetpub\wwwroot
) - 目的地(
D:\Arrigotti\Backup
) - 存檔(
D:\Arrigotti\Archive
)
那些是關鍵區域,用於爲了簡單起見,我將示例代碼省略一些驗證/錯誤處理。
public static class FileSystem
{
public static void CopyDirectory(string source, string destination)
{
DirectoryInfo directory = new DirectoryInfo(source);
DirectoryInfo[] directories = directory.GetDirectories();
foreach(DirectoryInfo dir in directories)
{
Console.WriteLine(@"Found Directory: {0}", dir.FullName);
if(Directory.Exists(Path.Combine(destination, dir.Name)))
{
Console.WriteLine(@"Attempting to write directory...");
Directory.CreateDirectory(Path.Combine(destination, dir.Name));
Console.WriteLine(@"Created Directory: {0}", dir.Name);
}
CopyDirectory(dir.FullName, Path.Combine(destination, dir.Name));
FileInfo[] files = dir.GetFiles();
foreach(FileInfo file in files)
{
Console.WriteLine(@"Found: {0}", file.FullName);
Console.WriteLine(@"Attempting to copy...");
file.CopyTo(Path.Combine(destination, file.Name), true);
}
}
}
}
我認爲這部分是相當準確和工作。但是,我的問題出現在我的電話中。
public static class Backup
{
public static void Save()
{
string[] drives = Directory.GetLogicalDrives();
foreach(string drive in drives)
{
DriveInfo diagnose = new DriveInfo(drive);
if(diagnose.VolumeLabel == @"Backup" && diagnose.DriveType == DriveType.Fixed)
{
CopyDirectory(
ConfigurationManager.AppSettings[@"Source"],
ConfigurationManager.AppSettings[@"Destination"]);
}
}
}
}
的代碼運行時,它看起來像在這一點上一帆風順,它完成五明百個目錄被複制,然後它隨機拋出異常的Web站點的(我離開錯誤處理了,爲了簡單起見,但這是錯誤)。
IOException:設備未準備好。
它隨機停止閱讀和寫
我不完全知道爲什麼會發生,任何的建議是了不起的。
我訪問的驅動器已準備就緒這與我自己的備份應用程序。我在複製操作本身上放了一個信號燈,之後一切都很好。 –
我在CopyDirectory中發現的是,如果目錄中的任何文件導致異常,則會跳過剩餘的文件,並使目標驅動器處於不確定狀態。 –
@GayotFow我認爲這就是發生了什麼,你應該將其作爲答案。這對未來的訪客來說非常有用。這確實是一個奇怪的錯誤。 – Greg