2009-07-20 6 views
0

StreamWriterオブジェクトを使用して、コンストラクタによって作成されたファイルまたは既に存在するファイルのいずれかに書き込みます。ファイルが存在する場合は、データを追加します。そうでない場合は、ファイルを作成してデータを追加する必要があります。問題は、ファイルを作成する必要があるときに、StreamWriterコンストラクタがファイルを作成するが、ファイルにデータを書き込まないということです。StreamWriter - 作成したファイルに追加しない

bool fileExists = File.Exists(filePath); 

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    if (!fileExists) 
    { 
     writer.WriteLine("start"); 
    } 

    writer.WriteLine("data"); 
} 

EDIT:答えを 感謝。 usingブロックは、ライターを閉じる処理を行います。それが他の人には効果的だと言えば、問題をさらに診断するための情報はありますか?このファイルはネットワーク上でローカライズされています。それが潜在的な問題になる可能性があります。断続的に、「パスの一部を見つけることができませんでした...」と「指定されたネットワーク名は使用できなくなりました」というエラーが表示されます。

+0

私のために働きます - – weiqure

+0

あなたのコードは私のマシンで完璧に動作します。 –

+0

私のためにも動作します... @ダン、もう一度やり直してみてください。多分最初の実行で何かを見逃しましたか?使用しているステートメントは、閉鎖とフラッシングの世話をする必要があります... –

答えて

1

さてさて、そう:ファイルが既に第二部は、データの書き込み、存在しない場合、あなたは二つの部分、ヘッダを書く最初の部分にあなたのコードを壊すすることは役立つかもしれない

私はそれを考え出した。私のローカルマシンは、ネットワーク経由でファイルに断続的にアクセスする際に問題を抱えていました。私はコードをサーバーにアップロードし、問題なく実行しました。私は本当にすべての助けに感謝します。解決が非常にエキサイティングではなかったことを申し訳ありません。

0

あなたのコードは、私の作品、3つの実行後に私がしました:

 
start 
data 
data 
data 

はあなたには、いくつかの理由のためにあなたがそれに書き込むことができないことを、あなたがアクセスファイルをしようとしていないことを、か?また、Dispose()はデータをフラッシュする必要がありますが、廃棄する前にwriter.Close()を置いてください。これで問題が解決しない場合は、適切なフラグを付けてFile.Create()を使用してファイルを手動で作成してみてください。 //編集

: は、私は私のマシン上でこのコードを試してみた:

 
public unsafe static void Main() 
{ 
    string filePath = @"\\COMP-NAME\Documents\foo.txt"; 
    FileStream fs = null; 
    if (!File.Exists(filePath)) 
     fs = File.Create(filePath); 
    else 
     fs = File.Open(filePath, FileMode.Append); 

    using (StreamWriter writer = new StreamWriter(fs)) 
    { 
     writer.WriteLine("data"); 
    } 
} 

そしてそれは、これを試してみてください可能性があり、スムーズに動作しますか?あなたのコードは私のために正しく働い

+0

それは私の最初の反応でした。私はそれが存在しないと、上記のコードを使用してファイルを作成しようとしたが、それはまた、最初の呼び出しで書くだろう。このようにサーバー上にファイルを作成する際に待ち時間の問題はありますか? –

+0

編集セクションでネットワーク上で動作するかどうかを確認するために調理したコードを投稿しました。この時間を使って100%正しい使用法ではないため、生産コードbtwとして扱わないでください。しかし、それは私のために働きます。ファイルを作成してidに追加するときにデータを入れています。 –

0

..

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    if (!fileExists) 
    { 
     writer.WriteLine("start"); 
    } 

    writer.WriteLine("data"); 
    writer.Flush(); 
} 
+2

著者は 'using'ステートメントを使用していますか? –

+0

サンプルコードを見ると、usingステートメントを使用していますか? –

1

コードは自分のコンピュータ上で正常に実行usingステートメントを試してみてください。変数filePathに何が含まれているのかわかりますか?おそらくあなたは間違ったファイルを見ていたでしょう...

更新:ネットワークに問題がありますか?たぶん誰かがネットワークの反対側で何かをしていたかもしれません。ローカルファイルに書き込んでみてください。それが動作する場合は、別の場所にあるリモートファイルに書き込んでみてください。

+1

string filePath = @ "\\ server \ folder \ filename.htm"; ファイルが作成された後の後続の呼び出しで動作し、正しいパスであることがわかります。 –

+0

指定した断続的なエラーメッセージに基づいて、サーバー自体がビジー/オフラインになる可能性があります。または、フォルダ自体が削除され、フォルダを作成する権限がない(またはフォルダを作成していない)。おそらく、ファイル/フォルダのアクセス権の問題でしょうか? –

0

投稿された他の人と同様に、あなたのコードは私のPCで正常に動作しています。

try 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.CreateNew)) 
    { 
     using (StreamWriter sw = new StreamWriter(fs)) 
     { 
      sw.WriteLine("start"); 
     } 
    } 
} 
catch (IOException ex) 
{ 
} 

using (StreamWriter writer = new StreamWriter(filePath, true)) 
{ 
    writer.WriteLine("data"); 
} 
関連する問題