1

以下のようなコードを書くと、

protected void Page_Load(object sender, eventAgrs e)
{
  string xDoc ="Durgesh kumar rao";
  File.Create(Server.MapPath("~/XML"));
  File.WriteAllText(Server.MapPath("~/XML"), xDOC);
}

このスロー例外、

ファイルが別のプロセスによって使用されているため、プロセスはファイルにアクセスできません。

私は何か間違ったことをしていますか、それとも File Static Method preform セキュリティ チェック、つまり例外がスローされる理由です。

4

3 に答える 3

4

File.WriteAllText は、ファイルがまだ存在しない場合に作成するため、最初に File.Create を呼び出す必要はありません。File.Create がファイルを作成して開くため、エラーが発生しています。File.WriteAllText を呼び出しても、ファイルは開いたままです。

于 2013-07-23T10:22:05.153 に答える
4

File.Createファイルを作成し、その周りにオープンを返すFileStreamため、排他的にロックしているファイルハンドルへの参照が既にあります。いずれの場合も、結果を破棄する必要があり、それ以外の場合は、呼び出しの戻り値を破棄しないでください。

つまり、要するに、作成したものを破棄します。

using (FileStream stream = File.Create(path)) {

}

ただし、ファイルが存在しない場合はファイルFile.WriteAllText Create作成するため、問題があることを除けば、への呼び出しは冗長です。そして、それは「残留」ストリームを返すのではなく、単にそれを実行するだけなので、次を使用してください。

File.WriteAllText(Server.MapPath("~/XML"), xDOC);
于 2013-07-23T10:21:04.133 に答える
3

このFile.CreateメソッドはFileStream、ファイルへの書き込みアクセスを許可する を返します。あなたはそれを使用していません。そのため、ファイルが開かれ、書き込みのためにロックされているため、次のステートメントは失敗します。

ただし、次のものはまったく必要ありませんFile.Create

http://msdn.microsoft.com/en-us/library/ms143375.aspx

Creates a new file, writes the specified string to the file, and then closes the file. If the target file already exists, it is overwritten.

File.WriteAllText無料で作成を処理します(ただし、上書きされるため、注意事項があります)。

于 2013-07-23T10:22:42.393 に答える