我厭倦了將循環病毒簽名寫入文件。 我的代碼:寫入文件時出錯 - 它被其他進程使用
for (int i = 0; i < liczba; i++)
{
int current = i + 1;
string xxx = w.DownloadString("xxx(hidden)");
if (xxx != "0")
{
string[] wirus = xxx.Split("|||".ToCharArray());
string s2 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "_RDTSignatures", "base000" + current.ToString() + ".rdtsignature");
File.Create(s2);
StreamWriter sss = new StreamWriter(s2); //that's crash line
sss.WriteLine("hidden");
sss.WriteLine(wirus[0]);
sss.WriteLine(wirus[1]);
sss.Close();
File.Encrypt(s2);
}
}
w
是WebClient
對象。錯誤回調:
System.IO.IOException: Process cannot access file : „C:\Users\Pluse Konto\Documents\Visual Studio 2010\Projects\Radzik Diagnostic Tool\Radzik Diagnostic Tool\bin\Debug\_RDTSignatures\base0001.rdtsignature」, because it is used by other process.
w System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
w 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)
w System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
w System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
w System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
w System.IO.StreamWriter..ctor(String path)
w Radzik_Diagnostic_Tool.Updates.timer1_Tick(Object sender, EventArgs e) w C:\Users\Pluse Konto\documents\visual studio 2010\Projects\Radzik Diagnostic Tool\Radzik Diagnostic Tool\Updates.cs:line 69
w System.Windows.Forms.Timer.OnTick(EventArgs e)
w System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
w System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我不知道那個錯誤的原因是什麼。當然,沒有進程正在使用我的文件,除了我的主線程。
PS文件base0001.rdtsignature
已創建,但爲空。
我假設錯誤發生在循環中的第二次迭代。問題在於你沒有在文件'File.Create(s2);'''上創建的文件處理(因此不能關閉文件)''File.Create(s2);''你反覆嘗試在你的循環中創建的文件。 – Alex
@Alex不是第二次迭代第一次迭代本身將失敗。 'File.Create(s2)'返回打開'FileStream' –
@SriramSakthivel你是對的。我甚至沒有注意到它試圖在這兩行上打開/創建相同的文件。 – Alex