删除时出现文件访问错误

时间:2016-08-16 18:20:53

标签: c# .net file-io

我的代码的目的是监视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);
    }
}

2 个答案:

答案 0 :(得分:0)

您可以尝试使用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);
    }
}

答案 1 :(得分:0)

好的,所以我错误地发生了异常。它实际上是在试图读取文件后第二次转过来。 我注意到如果运行此代码的线程已经终止并且#34;重新启动,那么一切都很顺利。所以我添加了一个解决方法,将线程本身放在一个循环中,而不是线程的方法。

        while (sending)
    {
                Thread EventSenderThread = new Thread(() =>
                    Communications.EventSender(Event_Directory));
                EventSenderThread.Start();
                while (EventSenderThread.IsAlive)
                { System.Windows.Forms.Application.DoEvents(); }
    }