1

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

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

今、私がこのように書くと:

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

既存のファイルで問題なく動作します。

4

5 に答える 5

2

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

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

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

于 2009-09-04T15:39:00.870 に答える
0

これを試して

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

既存のファイルでのみ機能するため、ファイルが新しいか既に存在するかを検証するには、次のようにします

 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");
    }
于 2017-06-05T16:44:59.210 に答える
0

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

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

私が提案するもう 1 つのことは、FolderDialog.SelectedPath + "\my_file.txt" が "C:\some_folder\my_file.txt" のハードコードされたパスと等しいことを確認することです。

于 2009-09-04T15:38:28.673 に答える
0

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

これを行うには、Process Explorerを実行し、 Ctrl+F を押してファイル名を入力し、[検索] をクリックします。

余談ですが、このタスクを達成するための最良の方法は次のとおりです。

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

編集:の 2 番目の引数にスラッシュを入れないPath.Combineでください。

于 2009-09-04T15:38:35.833 に答える
0

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

于 2009-09-04T15:38:36.193 に答える