Window CE 6奇怪的文件IO问题

时间:2012-09-10 15:38:01

标签: c# windows-ce

我有一个计时器功能,每分钟将一个对象序列化为一个xml文件。它工作了一段时间,但大约38个小时左右后,它有下面的IO异常。enter image description here

我可以在屏幕截图中看到该目录。此问题发生时我甚至可以在dos中输入以下命令:echo“test”> test.xml和我可以在那个确切的目录位置创建test.xml文件。

我的代码如下:

try
  {
    if (!Directory.Exists(filePath))
      this.log.Write(LogLevel.Fatal, this.componentName, "Directory not exists: " + filePath);


     lock (lockObject)
        {
          filepath = filepath + "ApplicationState.xml";
          if (File.Exists(filePath))
             File.Delete(filePath);

          if (this.StateObject != null && !File.Exists(filePath))
          {
             using (Stream sWrite = File.Create(filePath))
             {
                this.Serializer = new XmlSerializer(typeof(State));
                this.Serializer.Serialize(sWrite, this.StateObject);
             }
           }
        }
     }catch (Exception ex)
     {
        if (this.log != null)
        {
           this.log.Write(ex, this.componentName);
        }
     }
     finally
     {
        if (this.StreamWriter != null)
        {
             this.StreamWriter.Close();
        }
        bRun = true;

      }

我最好尝试检查一下代码以确保没有任何挂起的IO资源,此时我真的很丢失诚实......窗口CE或C#是否有某种类型的锁定一般IO上的资源,而不是我用来打开和读取文件的资源?

1 个答案:

答案 0 :(得分:4)

我看到你正在写一些名为“\ Hard Disk”的东西,这让我觉得你可能会写一些持久存储卷(例如板载闪存,USB磁盘,CF卡或其他)。请记住,这些外围设备需要设备驱动程序,并且可能需要一些中断处理程序,这些处理程序由设备OEM提供,而不是Microsoft作为操作系统的一部分提供。

总是有可能驱动链中存在导致问题的错误 - 它闻起来像并发锁失败。请记住,在使用嵌入式操作系统时,永远不要假设您看到的失败始终是您的代码。 OEM可能很容易在代码中出现错误。

我会攻击这两种方式:

  1. 向OEM报告问题并查看是否可以重新/修复
  2. 尝试将重试逻辑添加到您自己的代码中,以查找并处理此问题作为解决方法。