我正在嘗試在創建文件後寫入文件。它無法訪問它,這是我的代碼:
string[] name = file.Split('.');
HttpWebRequest FileRequest = (HttpWebRequest)WebRequest.Create(URL + name[0] + ".html");
FileRequest.UserAgent = "FSL File Getter Agent";
using (HttpWebResponse response = (HttpWebResponse)FileRequest.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
File.Create("C:\\Users\\" + System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "\\FSL\\" + Item + "\\" + file);
File.WriteAllText("C:\\Users\\" + System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\')[1] + "\\FSL\\" + Item + "\\" + file, reader.ReadToEnd());
}
這是堆棧跟踪:
The process cannot access the file 'C:\Users\Winksplorer\FSL\TestPRG\main.py' because it is being used by another process.
Stack Trace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding, Boolean checkHost)
at System.IO.File.WriteAllText(String path, String contents)
at FSL.Program.GetPKG(String URL, String Item) in Z:\FSL\Program.cs:line 85
at FSL.Program.Main(String[] args) in Z:\FSL\Program.cs:line 30
File.Create
返回一個FileStream
你很樂意忽略的。此操作的結果是持有打開文件的句柄,該句柄不會被及時處理。此外,您然後嘗試使用另一種方法File.WriteAllText
使用不同的文件句柄寫入該文件,這會導致您看到的錯誤。
解決此問題的方法是使用FileStream
您最初創建的,但更好的是,只需使用其中一種流CopyTo
方法
using var stream = response.GetResponseStream();
using var fs = File.Create(...)
stream.CopyTo(fs);
免責聲明:這些方法有異步版本,還有許多其他方法可以實現相同的目的。這沒有經過測試,也不意味著成為完美代碼的堡壘。這只是一種致敬……簡而言之,研究您使用的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句