2012-01-01 20 views
3

次のコードは動作しません(Word文書とPDFファイルを使用してテストされます)。.NETでのバイト配列の読み取りと書き込みWindowsフォーム

保存されたファイルは正しいアプリケーションを起動しますが、破損していて開けません。

OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
if (openFileDialog1.ShowDialog() != DialogResult.OK) 
    return; 

string filename = openFileDialog1.FileName; 
FileStream stream = File.OpenRead(filename); 
byte[] array = new byte[stream.Length]; 

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
saveFileDialog1.FileName = filename; 
if (DialogResult.OK != saveFileDialog1.ShowDialog()) 
    return; 

FileInfo fi = new FileInfo(saveFileDialog1.FileName); 
using (FileStream fs = fi.OpenWrite()) 
{ 
    fs.Write(array, 0, array.Length); 
} 
+0

あなたは何をしようとしていますか? テキストエディタでファイルを開こうとしましたが、それらに含まれているものを確認しましたか? –

+0

発生したエラーまたは例外テキストを含めて、発生するコード行を示してください。 – rfmodulator

+0

ヘキサエディタで保存したファイルを開き、ファイルに含まれている内容を確認します。 –

答えて

5

より良い結果を得るには、ファイルバイト配列メソッドを使用してください。

また、使い捨てオブジェクトを使用している場合はいつでもusingを使用してください。

 byte[] array; 
     string filename; 

     using (OpenFileDialog openFileDialog1 = new OpenFileDialog()) 
     { 
      if (openFileDialog1.ShowDialog() != DialogResult.OK) 
       return; 
      filename = openFileDialog1.FileName; 
      array = File.ReadAllBytes(filename); 
     } 

     using (SaveFileDialog saveFileDialog1 = new SaveFileDialog()) 
     { 
      saveFileDialog1.FileName = filename; 
      if (DialogResult.OK != saveFileDialog1.ShowDialog()) 
       return; 
      File.WriteAllBytes(array); 
     } 
+0

パーフェクト。多くのありがとう – robert

+0

@ user1125508:あなたは大歓迎です、そして、stackoverflowへようこそ!答えがあなたの質問を解決する場合は、答えの横にあるチェックマークをクリックし、十分な評判が得られたら、答えの横にある数字の上にある上向きの矢印をクリックする必要があります。ありがとう! –

2
FileStream stream = File.OpenRead(filename); 
byte[] array = new byte[stream.Length]; 

あなたが実際にあなたがちょうどいいサイズに配列を初期化しているが、データを記入していない、バイト単位で読み込むことはありません。つまり、あなたは新しいファイルに0バイトの束を書いています。

代わりにあなたの利点にフレームワークを使用する - Fileクラスはすでに、すべてのバイトを読み取るための静的メソッドがあります。

byte[] array = File.ReadAllBytes(filename); 

あるいは、上記本当にあなただけの使用をやろうとしているものの全範囲であればFile.Copy()

1

私の推測では、あなたがの配列を作成しているということでしょう。

byte[] array = new byte[stream.Length]; 

そして、このライン:あなたが実際にReadingによってすべてのバイトを二番目のデータソースとして、あなたの最初のFILESTREAMを使用することができます

fs.Write(array, 0, array.Length); 

この行を参照してください。

関連する問題