2010-11-19 12 views
1

これはまれな問題ですが、テキストファイルのデータを保存できません。 strpath = "c:\ path \ 1234 \ abcd.txt";テキストファイルのデータをCで保存できません#

ここにファイルが作成されていますが、ファイル内のデータは保存されません。

私はバイトBでチェックすると長はショー121

public int SaveFile(byte[] b,string lstrpath) 
     { 
FileStream fs = new FileStream(strpath,FileMode.Create); 
       fs.Write(b,0,b.Length); 
       fs.Close(); 
       if(File.Exists(strpath)) 
       { 
        return 1; 
       } 
       else 
       { 
        return 0; 
       } 
} 

ですが、私はここで間違っつもりはありますか?

+1

さて、何が起こっているのですか?後でファイルには何が入っていますか? –

答えて

1

ストリームを破棄してフラッシュしていません。このため、例外が発生した場合、プログラムはファイルハンドルをリークします。代わりにこれを試してみてください:

public void SaveFile(byte[] b,string lstrpath) 
{ 
    File.WriteAllBytes(lstrpath, b); 
} 

それはすでにBCLに組み込まれているようになりまし種類のSaveFile方法の目的に反しています。

0

閉じる前にFlush()を実行してください。それはfs.Flush()です。

+0

クローズはとにかくそれをフラッシュします –

0

確かにいくつかありますか?ファイルがすでに存在するかどうかはチェックしません。ディレクトリが存在するかどうかはチェックしません。ファイルシステムのアクセス許可をチェックしません。それらのいずれかが失敗する可能性があります。

また、あなたが失敗すると言ったら、どういう意味ですか?例外はありますか?エラー?それは0か1を返しますか?それは静かに失敗しますか?ファイルが空になっていますか?

ここでもエラー処理が必要です。エラーが発生した場所とそれに関する情報が表示されるという二重の利点があります。

0

その他の回答はすべて有効です(例外処理、廃棄、...)。usingステートメントを使用することもできます。 Darin Dimitrovsの答えに行くと、コードがはるかにシンプルで読みやすくなります。

質問:このメソッドをどのように呼びますか?これは簡単なコンソールアプリケーションで私にとっては役に立ちます。

class Program 
{ 
    static void Main(string[] args) 
    { 
     var text = "abcd"; 
     var encoding = new UTF8Encoding(); 
     var bytes = encoding.GetBytes(text); 
     SaveFile(bytes, @"D:\test.txt"); 
    } 

    public static int SaveFile(byte[] b, string strpath) 
    { 
     FileStream fs = new FileStream(strpath, FileMode.Create); 
     fs.Write(b, 0, b.Length); 
     fs.Close(); 
     if (File.Exists(strpath)) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
} 

注意同じメソッドを使用しています。毎回私のために働くので、ファイルはすでに存在することができます。あなたの場合、文字列を渡していない可能性がありますか?おそらくエンコーディングの問題?

関連する問題