我正在嘗試在創建檔案后寫入檔案。它無法訪問它,這是我的代碼:
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
uj5u.com熱心網友回復:
File.Create回傳一個FileStream你很樂意忽略的。此操作的結果是持有打開檔案的句柄,該句柄不會被及時處理。此外,您然后嘗試使用另一種方法File.WriteAllText使用不同的檔案句柄寫入該檔案,這會導致您看到的錯誤。
解決這個問題的方法是使用FileStream您最初創建的,但更好的是,只需使用其中一種流CopyTo方法
using var stream = response.GetResponseStream();
using var fs = File.Create(...)
stream.CopyTo(fs);
免責宣告:這些方法有異步版本,還有許多其他方法可以實作相同的目的。這沒有經過測驗,可能有印刷錯誤,可能包含也可能不包含堅果的痕跡,并不意味著成為完美代碼的堡壘......它只是一個致敬......簡而言之,研究你使用的方法互聯網
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/356566.html
上一篇:從控制器方法填充下拉串列
