删除文件时访问错误
本文关键字:错误 访问 文件 删除 | 更新日期: 2023-09-27 18:02:35
这里的代码的目的是监视xml文件的文件夹。如果一个文件被放在文件夹中,它将被读取,转换成byte[],通过套接字发送到服务器,然后删除。
这只适用于之前没有发送的文件被放置在文件夹中。
示例:我发送1.xml,一切正常,文件被删除。我将1.xml粘贴到文件夹中。文件被读取,但在删除时抛出异常(由另一个
使用)过程).
如果我等待足够长的时间或替换文件名,它将正常工作。我可以添加一个延迟(测试至少使用3秒),但这违背了我的程序的目的。
我用Python写了同样的代码,它工作得很好,所以我被难住了。请参阅下面的代码。谢谢你的帮助!
string[] files;
while (sending)
{
files = Directory.GetFiles(Events_Directory, "*.xml");
foreach(string file in files)
{
Message = System.Text.UTF8Encoding.ASCII.GetBytes(Regex.Replace(
File.ReadAllText(file), @"['r'n't ]+", ""));
Thread.Sleep(500);
Sock.Send(Message);
File.Delete(file);
}
}
您可以尝试使用StreamReader并在读取后显式关闭流。
string[] files;
while (sending)
{
files = Directory.GetFiles(Events_Directory, "*.xml");
foreach (string file in files)
{
StreamReader IN = new StreamReader(file);
string allText = IN.ReadToEnd();
IN.Close();
Message = System.Text.UTF8Encoding.ASCII.GetBytes(Regex.Replace(
allText, @"['r'n't ]+", ""));
Sock.Send(Message);
File.Delete(file);
}
}
好的,所以我错了异常发生的地方。它实际上是在试图读取文件后的第二次去。我注意到,如果这个代码正在运行的线程被终止并"重新"启动,一切都很好。因此,我添加了一个变通方法,将线程本身置于循环中,而不是线程的方法。
while (sending)
{
Thread EventSenderThread = new Thread(() =>
Communications.EventSender(Event_Directory));
EventSenderThread.Start();
while (EventSenderThread.IsAlive)
{ System.Windows.Forms.Application.DoEvents(); }
}