重複していると申し訳ありません。正しい方向に私を指差してください。私は2つのディレクトリDir1とDir2を持っています。 Dir1に1つのファイルがあり、Dir2に2つのファイルがあります。C#:2つの異なるディレクトリからすべてのファイルを削除するか、全く削除しない
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");
}
}
私は(ところで:*どのように私は*また、問題ではないことを行うことができます)...ここか質問が表示されていない –
@AaronHudon注:1 DB操作を組み合わせることについて、他の質問会談いると* 1つのファイル操作*はトランザクションのようなものです。トランザクション内で*複数のファイル操作*を結合する問題は、そこには触れられず、唯一の受け入れられた答えは、ファイル操作が1つだけである場合にのみ、排他的に有効です。 –
これは有効な質問だと思います。 –