如果重複,我很抱歉。請指向正確的方向。我有2個目錄Dir1和Dir2。我在Dir1中有一個文件,在Dir2中有兩個文件。C#:從兩個不同的目錄中刪除所有文件或不刪除
Dir1
-Dir1File1.txt
Dir2
-Dir2File1.txt
-Dir2File2.txt
現在我需要刪除Dir1和Dir2中的所有文件。我需要刪除所有文件或無,也就是說,如果我成功刪除Dir1中的文件並嘗試刪除Dir2中的文件,並且如果發生錯誤,那麼我必須在Dir1中回滾我的刪除。
SOLUTION
不是創建和刪除臨時文件夾這是我做的。我用字典來跟蹤我的文件全名和我想刪除的數據。
private static void DeleteAllFilesOrNone()
{
string featuresFolder = @"C:\SCD_Sample\Dir1";
string cfxFolder = @"C:\SCD_Sample\Dir2";
Dictionary<string, string> featuresFileInfo = new Dictionary<string, string>();
Dictionary<string, string> cfxFileInfo = new Dictionary<string, string>();
List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
bool rollbackFileDeleteNeeded = false;
try
{
DirectoryInfo featuresDir = new DirectoryInfo(featuresFolder);
foreach (var f in featuresDir.GetFiles())
{
string key = f.FullName;
string xml = System.IO.File.ReadAllText(key);
featuresFileInfo.Add(key, xml);
}
DirectoryInfo cfxDir = new DirectoryInfo(cfxFolder);
foreach (var f in cfxDir.GetFiles())
{
string key = f.FullName;
string xml = System.IO.File.ReadAllText(key);
cfxFileInfo.Add(key, xml);
}
list.Add(featuresFileInfo);
list.Add(cfxFileInfo);
//after this any error happens we need to rollback all deleted files
rollbackFileDeleteNeeded = true;
//start deleting files
foreach(Dictionary<string, string> dict in list)
{
foreach (KeyValuePair<string, string> kvp in dict)
{
if (File.Exists(kvp.Key))
{
//file exists to delete
File.Delete(kvp.Key);
//throw new Exception();
}
}
}
Console.WriteLine("Success");
}
catch(Exception ex)
{
if (rollbackFileDeleteNeeded == true)
{
foreach (Dictionary<string, string> dict in list)
{
foreach (KeyValuePair<string, string> kvp in dict)
{
if (File.Exists(kvp.Key) == false)
{
//file doesnot exists
System.IO.File.WriteAllText(kvp.Key, kvp.Value);
}
}
}
}
Console.WriteLine("Rolled back");
}
}
我看不出有任何的問題在這裏...(BTW:*我怎麼能這樣做*是不是一個問題也) –
@AaronHudon:請注意,關於組合一個DB操作和其他問題舉行會談*一個文件操作*就像一個事務。在一個事務中結合*多於一個文件操作*的問題在這裏沒有涉及,並且如果只有一個文件操作,則唯一的和被接受的答案是唯一有效的。 –
我相信這是一個有效的問題。 –