2011-07-22 6 views
8

最近、私はissサーバー上のmssqlのコンパクトなデータベースファイルを更新する小さなアプリケーションを扱っています。File.CopyとFile.Moveの相違点

SSISを使用してフローを整理することをお勧めしました。数日間それはうまくいったが、その後エラーを出し始めた。

SSISでは、「ファイルシステムタスク」の「ファイルの移動」操作を使用して、生成されたファイルをフォルダからサーバーの共有フォルダに移動しました。失敗した場合は、ロックされたファイルの場合は、後で試行します。しかし、私は時々、宛先フォルダのファイルが消え始めたのを見ました。

私はカスタムコードを書くことに決めました。私は "File System Task"を削除し、代わりに "Script Task"を入れました。そしてそれに数行を書きます。

string destinationFile, sourceFile; 
destinationFile = Path.Combine(Dts.Variables["FileRemoteCopyLocation"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString()); 
sourceFile = Path.Combine(Dts.Variables["OrginalFilePath"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString()); 


bool written = false; 


try 
{ 
    File.Copy(sourceFile, destinationFile, true); 
    File.Delete(sourceFile); 
    written = true; 
} 
catch(IOException) { 
    //log it 
} 


if (written) 
    Dts.TaskResult = (int)ScriptResults.Success; 
else 
    Dts.TaskResult = (int)ScriptResults.Failure; 

これはうまくいきました。しかし、私は宛先ファイルをロックしてみました。私は、Sql Server Management Studio(sdfファイル)で宛先ファイルを接続しました。そして、驚くほどうまくいく。

そして、私はオペレーティングシステムから、ソースファイルをコピーしてそれをコピー先に貼り付けることで試しました。私はそれを上書きしたいと私に尋ね、私はイエスと言い、それは私が別のプロセスで使用するファイル(コピーと置き換え)を上書きしました。 名前を変更しようとすると削除してもそれはできません。または、切り取って貼り付けようとすると(「移動」と「置換」)、「この操作を実行する権限が必要です」と表示されます。

私が理解しているように、「コピー、削除」と「移動」は全く異なるものです。そして、私はまだロックされたファイルを上書きする方法を理解できません。

アイデア?

+0

[ファイルコピーを行う際に/削除と移動の違い]の可能複製(http://stackoverflow.com:あなたはコピーの組み合わせを使用してメソッドにから

回答のorignalを削除することができ、これを克服するために/questions/6621956 /差異間のファイルコピーの削除と移動) – BrokenGlass

+0

いいえ、File.Copyを使ってどのようにロックされたファイルを上書きすることができるのだろうか? 以下の2つのコードブロックが同じではない: 最初 'File.Copy(SOURCEFILE、destinationFile、TRUE); File.Delete(SOURCEFILE);' 第 'File.Delete(destinationFile);ファイル。移動(sourceFile、destinationFile); ' – fkucuk

答えて

5

File.Moveメソッドを使用して、あるパスから別のパスにファイルを移動できます。この方法はディスクボリューム全体で機能し、ソースとデスティネーションが同じ場合は例外をスローしません。

Moveメソッドを使用して既存のファイルを上書きすることはできません。同じ名前のファイルをそのディレクトリに移動してファイルを置き換えようとすると、IOExceptionが発生します。 Difference between in doing file copy/delete and Move

+0

実際に私はあなたの質問をする前にあなたが言及した投稿を読んだ。 ここでの主な質問は、「どのように私がFile.Copyによってロックされたファイルを上書きすることができるか」です。 そして、私は、使用中のsdfファイルを上書きした後、破損していることに気付きました! "あなたが目的地に存在する場合、ファイルを移動することはできません"以上のことがあると思います。 – fkucuk

関連する問題