0

ループ ウイルス シグネチャをファイルに書き込むのにうんざりしていました。私のコード:

 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);
                    }
                }

wWebClientオブジェクトです。エラー コールバック:

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が作成されましたが、空です。

4

4 に答える 4

2

File.Createopen を返すFileStreamので、 new を作成するStreamWriterと、プロセスですでに開かれているファイルにアクセスしようとし、File.Create結果は次のようになりますIOException

これを試して

using (StreamWriter sss = new StreamWriter(File.Create(s2)))
{
    //Make use of sss
}

StreamWriterUsing ステートメントは、制御が終了したときに、 の基になるストリームが確実に閉じられるようにしますUsingsss.Close();したがって、手動で呼び出す必要はありません 。using ステートメントは、例外がスローされた場合でもそれを行います。

于 2013-08-24T19:00:31.117 に答える
1

によって作成されたファイルを閉じませんFile.Create(s2);

試してみるusing( File.Create(s2) );File.Create(s2).Close();

于 2013-08-24T18:48:26.560 に答える