2016-12-13 10 views
-1

これを行う方法は多岐にわたりましたが、ファイルを保存する前に削除しようとするとファイルが使用中であることが表示されます。は使用中であるためファイルを保存できません

ご覧のとおり、「使用中」のブロックにはすべてがあります。私はまた、ファイルを "閉じる"し、明示的に "dispose"も呼び出そうと試みました。しかし、コードをもう一度実行すると、ファイルが使用中であることがわかります。ファイルを上書きできるようにするにはどうすればよいですか?

私もそれをこのように試してみた:

using (Bitmap bmp = new Bitmap((Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap))) 
{ 
    if (bmp != null) 
    { 
     if (File.Exists(filename)) { File.Delete(filename); } 
     using (MemoryStream memory = new MemoryStream()) 
     { 
      using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite)) 
      { 
       bmp.Save(memory, ImageFormat.Bmp); 
       byte[] bytes = memory.ToArray(); 
       fs.Write(bytes, 0, bytes.Length); 
       fs.Close(); 
      } 
      memory.Dispose(); 
     } 
     bmp.Dispose(); 
     break; 
    } 
} 

をし、それはまだ私に同じエラーを与えます。

+0

ストリームを削除せずにプログラムを閉じようとした後で、これを後で追加しましたか?古いストリームがあなたのコンピュータを浮かべてファイルをブロックする可能性があり、アクセスできないためファイルを閉じることができません。あなたのコンピュータを再起動してみると、この問題は解決されるはずです(これが問題の場合)。 – Lehue

+0

失われたファイルストリームを殺す他の方法があるかもしれませんが、私は(正直言って私もそれらを探したことはありません)何も知らない。 – Lehue

+0

おそらく理由があります。あなたが作成したファイル/ファイルパスを利用する他に何かありますか?たぶん、ファイルパスは、何かをしてロックしたり、ストリームをクリーンアップしたりしないものに返されますか?あなたのFileStreamの周りにブロックを使用している限り、あなたが私たちに示したコードにない可能性があります。私はあなたがループでこれを置くと成功するでしょう(あなたが入力するときにファイルがロックされていないと仮定して)賭けても構わないと思います。 – Igor

答えて

0

プログラムが実行される前にファイルが既にロックされている場合は、そのファイルを開くことができません。 Unlockerのようなプログラムを使用してロックを解除できるかどうかを確認してください。ファイルのロックが解除されたら、再度開くことができます。

ファイルストリームをusing{}ステートメントにラップすると、close();dispose();コールは必要ありません。それらはコードがusing{}ステートメントを終了するときに実行されます。 close();に電話するのは怪しいことではありませんが、それは冗長です。しかし、dispose();に電話をかけ、使用終了の電話番号がdispose();である場合は、廃棄オブジェクトにdispose();を呼び出しているので例外が発生する可能性があります。プログラムはusing{}ブロック内でループしている間にタスクマネージャ(マングラー)を介して、あなたのプログラムの「プロセスを終了」の場合close();

dispose();にあなたの呼び出しを削除するか、あなたのIDE内で「停止」ボタンをクリックして、それがロックされますもう一度 'Unlocker'を使用する必要があります。

したがって、close()dispose()のコールを削除してから、[アンロック]を使用してファイルのロックを解除します。 ...あなたのプログラムを実行し、あなたは黄金色でなければなりません

UPDATE:

次のコードの周りにtry/catchブロックを置く:あなたがこれまで以上に例外を取得するかどうかを確認してください

 bmp.Save(memory, ImageFormat.Bmp); 
     byte[] bytes = memory.ToArray(); 
     fs.Write(bytes, 0, bytes.Length); 

をコードの塊。あなたがtry/catchを置くと、なぜ問題が起きているのかを指摘するかもしれません。

+0

私のプログラムを実行する前にファイルが存在しない、私はそれを作成しています。私は "使用する"ことは私のためにすべてを行うことを理解し、絶対確実性のためにそれらを追加し、私は壁に頭を叩いているので、なぜこれがすべきではないのかを理解しようとしている。私はそれらの余分な呼び出しからエラーを取得していないよ。しかし、私はそれらを削除した、と私はまだ2番目の試みで同じエラーを取得しています。 –

+0

上記の私の更新をご覧ください。おそらく試して/キャッチは、ソリューションにいくつかの光を当てることができます.. – Curtis

関連する問題