ファイルを書き込むためのコードは次のとおりです。問題は、同じファイルを上書きしたい場合、「ロックされている」ということです。ファイルは別のプロセスによって開かれます。Filestreamは他のプロセスでファイルを解放しません。
using (FileStream fs = new FileStream("C:\\New\\" + fileName, FileMode.Create, FileAccess.ReadWrite))
using (StreamWriter str = new StreamWriter(fs))
{
str.Write(jsonFile);
str.Dispose();
str.Close();
}
json文字列をAPIに送信してから、ファイルを生成します。だから私はそれがIISの問題かもしれないと思う。
EDIT:Researchが 私はまだ、次のコードを試してみましたが、同じ結果にどのつながる
using (FileStream fs = new FileStream("C:\\New\\" + fileName, FileMode.Create, FileAccess.ReadWrite))
{
StreamWriter sw = new StreamWriter(fs);
sw.Write(jsonFile);
fs.Flush();
fs.Close();
}
EDIT 2:コメントを読んだ後、それはおそらくにファイルストリームとは何の関係もありません 自体。ここに私のアプリケーションに関する詳細があります: 私はButtonClickを通して私のAPIに投稿を送るWPFアプリケーションを持っています。これは、次のようにトリガーされます。
private async void btnSend_Click(object sender, RoutedEventArgs e)
{
await Seal();
}
シール方法は、次の言葉:
private async System.Threading.Tasks.Task Seal()
{
var result = await RequestManager.DoPost<bool>("FOO", foo);
}
RequestManagerには、次の言葉:
public static async Task<R> DoPost<R>(String route, Object payload, String contenttype)
{
var serializer = new JavaScriptSerializer();
route = route.StartsWith("/") ? route : "/" + route;
var content = new StringContent(serializer.Serialize(payload), Encoding.UTF8, contenttype);
var response = await client.PostAsync(RequestManager.API_URL + route, content);
if (response.StatusCode == HttpStatusCode.OK)
{
var result = await response.Content.ReadAsStringAsync();
return (R)serializer.Deserialize(result, typeof(R));
}
else
{
throw new ResponseException(response.StatusCode, response.Content.ReadAsStringAsync().Result);
}
}
私の誤差がある場合、私は本当に知りません、または要求をクローズする必要がある場所。
'Dispose'と' Close'呼び出しは 'using'文 –
で冗長である、これは、あなたや他のプロセスによってロックされていることができ、より多くの情報が必要です。再作成手順を提供してください。たとえば、これは正確に何を呼んでいますか?これはマルチユーザー、マルチスレッド、またはWeb環境ですか?明らかに、同時に複数のプロセスによってファイルに書き込むことはできません。 – Liam
https://xkcd.com/1888/ –