|
分類:[C#]
2014/03/21(Fri) 11:41:04 編集(投稿者)
バックアップファイル用のDBファイルを作成しようとおもっているのですが、
1.TESTDB.sdf⇒バックアップ前用ファイル.sdfとしてコピー 2.復元するDB.sdf⇒TESTDB.sdfにコピー
を連続して次のように実行すると、TESTDB.sdfが壊れます。
System.IO.File.Copy(System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf", バックアップファイルネーム, true); System.IO.File.Copy(ofd.FileName, System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf", true);
同期が取れていないからだと思い、
1.TESTDB.sdf⇒バックアップ前用ファイル.sdfとしてコピー 2.1が完了したら 3.復元するDB.sdf⇒TESTDB.sdfにコピー 3.4が完了したら終了
この2番目の1が完了したらと4番目の完了したら のタイミングが今一分からない。
単純に、 System.IO.File.Copyを2回行うと TESTDB.sdfが壊れます。
そのために、1が完了する術を探していますが、 いまいち完了のタイミングが分かりません。
単純に1が完了したら、TESTDB.sdfが削除できるので TEST.sdfの削除が出来るようになるまで待機 3が完了したら、リネームが出来るので、 TESTDB.sdf⇒TESTDB.sdfとして リネームができるようになるまで待機判断をして 次のようにしてみました。
ただし、これをやると、 出来る時と、永遠に終わらなくなってしまう時がある。
string バックアップファイルネーム = System.Windows.Forms.Application.StartupPath + "\\Backup\\TEST_" + 日付.ToString("yyyyMMdd" + "-" + "HHmmssバックアップ前") + ".sdf";
System.IO.File.Copy(System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf", バックアップファイルネーム, true);
//ファイルコピー完了の確認 //ファイルコピーが完了していなければ削除できないので・・ bool loop_flg = false; while (loop_flg != true) { try { System.IO.File.Delete(System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf"); loop_flg = true; } catch { Application.DoEvents(); Thread.Sleep(1000); } }
//ファイルコピー完了の確認 //ファイルコピーが完了していなければリネームできないので・・ System.IO.File.Copy(ofd.FileName, System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf", true); loop_flg = false; while (loop_flg != true) { try { System.IO.File.Move(System.Windows.Forms.Application.StartupPath + "\\TESTDB.sdf", "TESTDB.sdf"); loop_flg = true; } catch { Application.DoEvents(); Thread.Sleep(1000); } } Thread.Sleep(1000);
どなたか良きアドバイスをお願い致します。 こちらは不明のままです。
よろしくお願いします。
|