2009-09-04 23 views
1

StreamWriterを使用してファイルにテキストを書き込んで、FolderDialogの選択したフォルダからファイルのパスをに変更しようとしています。 ファイルが存在しない場合、私のコードは正常に動作します。ファイルがすでに存在する場合は、のという例外がスローされ、そのファイルは他のプロセスによって使用されています。StreamWriterが既存のファイルに書き込めません

using(StreamWriter sw = new StreamWriter(FolderDialog.SelectedPath + @"\my_file.txt") 
{ 
    sw.writeLine("blablabla"); 
} 

今、私はこのように書いた場合:

using(StreamWriter sw = new StreamWriter(@"C:\some_folder\my_file.txt") 

それが既存のファイルで正常に動作します。

+0

あるような何かを、そう検証するために、既存のファイルで動作します?それはちょうど "some_folder"か "c:\ some_folder \"ですか? – Sathya

答えて

0

これは安価な回答ですが、この回避策を試しましたか?

string sFileName= FolderDialog.SelectedPath + @"\my_file.txt"; 
using(StreamWriter sw = new StreamWriter(sFileName)) 
{ 
    sw.writeLine("blablabla"); 
} 

私は示唆している他の事はFolderDialog.SelectedPath + "\ my_file.txtは" のハードコードされたパスに等しいことを確認して、 "C:\ some_folder \ my_file.txt"。

0

ファイルが実際に他のプロセスによって使用されているかどうかを確認します。

Process Explorerを実行し、Ctrl + Fキーを押してファイル名を入力し、[検索]をクリックします。余談として

は、このタスクを達成するための最良の方法は、このようなものです:

using(StreamWriter sw = File.AppendText(Path.Combine(FolderDialog.SelectedPath, @"my_file.txt"))) 

EDITませPath.Combineに2つ目の引数にスラッシュを入れています。

0

ファイルはすでに使用されているため、上書きすることはできません。ただし、このメッセージは必ずしも完全に正確であるとは限りません。実際にはファイルは独自のプロセスで使用されている可能性があります。使用パターンを確認してください。

2

これは、パスとファイル名を組み合わせる方法と関係があります。これを試してみてください:

using(StreamWriter sw = new StreamWriter(
    Path.Combine(FolderDialog.SelectedPath, "my_file.txt")) 
{ 
    sw.writeLine("blablabla"); 
} 

また、FolderDialog.SelectedPathの値が空白でないことを確認してください。 :)

0

試してみてください。この

using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt")) 
    { 
      sw.writeLine("blablabla"); 
    } 

ファイルが新規であるか、すでに存在する場合にのみ返すFolderDialog.SelectedPath何

string path = @"C:\some_folder\my_file.txt"; 
     if (!File.Exists(path)) 
     { 
      // Create a file to write to. 
      using (StreamWriter sw = File.CreateText(path)) 
      { 
       //once file was created insert the text or the columns 
       sw.WriteLine("blbalbala"); 

      } 
     } 
     // if already exists just write 
using (StreamWriter sw = File.AppendText(@"C:\some_folder\my_file.txt")) 
    { 
      sw.writeLine("blablabla"); 
    } 
関連する問題