Ich habe den folgenden Code, um eine Datei zu schreiben. Das Problem ist, dass wenn ich die gleiche Datei überschreiben möchte, sie "gesperrt" ist. Die Datei wird von einem anderen Prozess geöffnet.Filestream nicht Datei für andere Prozesse frei
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();
}
Ich sende eine JSON-Zeichenfolge an eine API, die dann die Datei generiert. Also ich denke, es könnte ein Problem in IIS sein.
EDIT: Durch Forschung Ich habe immer noch den folgenden Code versucht, aber das führt zu dem gleichen Ergebnis
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: Nach dem Lesen der Kommentare, es hat wahrscheinlich nichts mit dem Filestream zu tun selbst. Hier finden Sie weitere Informationen zu meiner Anwendung: Ich habe eine WPF-Anwendung, die einen Post über ein ButtonClick an meine API sendet. Dies löste sich wie folgt:
private async void btnSend_Click(object sender, RoutedEventArgs e)
{
await Seal();
}
Die Seal-Methode sagt der folgende:
private async System.Threading.Tasks.Task Seal()
{
var result = await RequestManager.DoPost<bool>("FOO", foo);
}
Die RequestManager sagt der folgende:
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);
}
}
Ich weiß wirklich nicht, wo mein Fehler ist, oder wo die Anfrage geschlossen werden muss.
Die 'Dispose' und' Close' Anrufe sind redundant mit einer 'using'-Anweisung –
Sie benötigen weitere Informationen, das von Ihnen oder einem anderen Prozess gesperrt werden werden könnte. Bitte geben Sie die Schritte zur Neuerstellung an. Zum Beispiel, was genau nennt das? Ist dies eine Multi-User-, Multi-Threading- oder Web-Umgebung? Offensichtlich kann eine Datei nicht gleichzeitig mit mehreren Prozessen beschrieben werden. – Liam
https://xkcd.com/1888/ –