5

次のエラーが表示されます: 別のプロセスで使用されているため、プロセスはファイル (...) にアクセスできません。私は使用しようとしました File.WriteAllText;

StreamWriter sw = new StreamWriter(myfilepath);
                sw.Write(mystring);
                sw.Close();
                sw.Dispose();

;

using (FileStream fstr = File.Create(myfilepath))
                {
                StreamWriter sw = new StreamWriter(myfilepath);
                sw.Write(mystring);
                sw.Close();
                sw.Dispose();
                fstr.Close();
                }

私がやろうとしているのは、ファイルにアクセスして書き込み、それを閉じることだけです。私はばかげた間違いをしているかもしれませんが、私が間違っていることとその理由を理解したいと思います. ファイルが閉じられていることを確認し、このエラーが再び発生しないようにする方法。

これまでの回答に助けられて、私はこれを行いました:

using (FileStream fstr = File.Open(myfilepath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
                {
                    StreamWriter sw = new StreamWriter(fstr);
                    sw.Write(mystring);
                    sw.Close();


                }

ページに2回目にアクセスしたときに別のファイルにアクセスしようとすると、ファイルのプロセスを閉じる/停止するように見えるので、より良いようです。しかし、もう一度同じファイルにアクセスしようとすると、再びエラーが発生します。

4

4 に答える 4

4

なぜ使用しないのですか:

System.IO.File.WriteAllText(myfilepath, mystring");

それはあなたのファイルをロックするべきではありません。

内部的に WriteAllText はFileShare.Readを使用し、書き込みが完了するとすぐにそのロックを解放します。

于 2012-07-27T11:51:37.567 に答える
2

「別のプロセスで使用されているため」が手がかりです。たまたまファイルをメモ帳などで開いていませんか?

ファイルを開くときに共有モードを設定して、閲覧者を許可し、必要なアクセス許可 (書き込みアクセス) のみを要求する必要がある場合があります。

于 2012-07-27T11:46:51.593 に答える
1

皆様のご協力に感謝いたします。実際、このコードとは別に、上記のコードの後で stremReader がまだ別の場所で開かれていることがわかりました。最後に、以前のコードを次のように変更しました。

using (FileStream fstr = File.Open(myfile, FileMode.OpenOrCreate, FileAccess.ReadWrite))

                    {
                        StreamWriter sw = new StreamWriter(fstr);
                        sw.Write(mystring);
                        sw.Flush();
                        sw.Dispose();
                    }

そして私のStreamReaderで私はこれをしました:

StreamReader sr = new StreamReader(myfile);
string sometext = sr.ReadToEnd();
sr.Dispose();

これを使用することもできます:

File.ReadAllText(myfile);

もっと良い方法でできたことがあれば教えてください。どうもありがとうございました。

于 2012-07-31T09:11:31.797 に答える
0

これを試して

FileStream fs = new FileStream(myfilepath, FileMode.Create, FileAccess.Write);            
byte[] bt = System.Text.Encoding.ASCII.GetBytes(mystring);
fs.Write(bt, 0, bt.Length);
fs.Close();
于 2012-07-27T11:50:26.210 に答える