C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DBのバックアップファイルの作り方がわかりません。


(過去ログ 120 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■70408 / inTopicNo.1)  DBのバックアップファイルの作り方がわかりません。
  
□投稿者/ yuka (5回)-(2014/03/20(Thu) 22:20:04)

分類:[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);

どなたか良きアドバイスをお願い致します。
こちらは不明のままです。

よろしくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -