我厌倦了将循环病毒签名写入文件。 我的代码:
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
已创建,但为空。
答案 0 :(得分:2)
File.Create
会返回打开的FileStream
,因此当您创建新的StreamWriter
时,它会尝试访问已在您的流程中打开的文件File.Create
会导致{{ 1}}
试试这个
IOException
使用语句确保在控件退出using (StreamWriter sss = new StreamWriter(File.Create(s2)))
{
//Make use of sss
}
时关闭StreamWriter
的基础流。因此无需手动调用Using
。即使抛出异常,using语句也会为你做。
答案 1 :(得分:1)
您不会关闭File.Create(s2);
创建的文件。
尝试using( File.Create(s2) );
或File.Create(s2).Close();
答案 2 :(得分:1)
只是评论出来:
File.Create(S2);
问题是File.Create(s2)返回FileStream,使文件保持打开状态。然后,您尝试创建第二个流以打开文件以便再次写入,这就是您收到文件已经打开的错误的原因。
如果您始终想要创建新文件,请将创建StreamWriter的行更改为:
StreamWriter sss = new StreamWriter(s2,false);
这将使它不会附加到现有文件,而是覆盖它。
答案 3 :(得分:0)
而不是:
File.Create(s2);
StreamWriter sss = new StreamWriter(s2); //that's crash line
使用:
StreamWriter sss = File.CreateText(s2);