StreamWriter生成0字节文件

时间:2012-08-13 14:40:18

标签: c# io windows-ce

我有以下逻辑,通过Timer每20分钟调用一次,它将对象的内容序列化为文件路径,我看到的文件路径是\ hard disk \ logs \ applicationstate.xml,请注意我确认这是一条有效的道路..

它大部分时间都可以工作,但我不时地在System.IO.IOeException行上获得this.StreamWriter = new StreamWriter(filePath);,其中包含以下堆栈跟踪:

  

at System.IO .__ Error.WinIOError(Int32 errorCode,String str)\ r \ n at   System.IO.FileStream..ctor(String path,FileMode mode,FileAccess   access,FileShare share,Int32 bufferSize,Boolean useAsync,String   msgPath)\ r \ n在System.IO.FileStream..ctor(String path,FileMode   模式,FileAccess访问,FileShare共享,Int32 bufferSize)\ r \ n at   System.IO.StreamWriter.CreateFile(String path,Boolean append)\ r \ n
  在System.IO.StreamWriter..ctor(String path,Boolean append,Encoding   encoding,Int32 bufferSize)\ r \ n at   System.IO.StreamWriter..ctor(String path)\ r \ n at   Shs.ScanPanel.CA.DataManager.DataManagercr.CopyData(对象数据)\ r \ n
  在System.Threading.Timer.ring()\ r \ n“

当它发生时,我看到\ hard disk \ logs \ applicationstate.xml存在,但它有0字节。

所以我的问题是,StreamWriter是否会导致首先生成这个0字节文件?我在MSDN上的StreamWriter下阅读了IOException,并说明了以下内容

IOException的
path包含文件名,目录名或卷标语法的错误或无效语法。

这让我很困惑,是因为它试图将流编写器打开到0字节文件?这个代码最后一次运行时生成的这个0字节可以将null对象序列化到文件中吗?如果是这样,我为什么不在Visual Studio中看到该异常?

            if (filePath != string.Empty)
            {
                if (this.StateObject == null)
                {
                    this.StateObject = new State();
                }
                    //Do something to my StateObject object

                    this.StreamWriter = new StreamWriter(filePath);
                    this.Serializer = new XmlSerializer(typeof(State));

                    this.Serializer.Serialize(this.StreamWriter, this.StateObject);
                }
                else
                {
                    if (this.log != null)
                    {
                        this.log.Write(LogLevel.Error, this.componentName, "CopyData : Unable to initilize State Object");
                    }
                }
            }
            else
            {
                if (this.log != null)
                {
                    this.log.Write(LogLevel.Error, this.componentName, "CopyData : Error while retrieving Current working directory");
                }
            }
        }
        catch (Exception ex)
        {
            if (this.log != null)
            {
                this.log.Write(ex, this.componentName);
            }
        }
        finally
        {
            if (this.StreamWriter != null)
            {
                this.StreamWriter.Close();
            }
        }

2 个答案:

答案 0 :(得分:0)

我建议使用 this.StreamWriter.Flush()来确保写入所有内容。

但是你的异常似乎是在抱怨路径不正确。

编辑:Opps我错过了WinCE标签

答案 1 :(得分:0)

所以我写了一个小程序,我确认使文件有0字节的行就在this.StreamWriter = new StreamWriter(filePath);

但真正令我困惑的是它成功地清除了文件,以便新数据可以序列化到它中,但同时它会引发异常。我认为这是StreamWriter api的较低层,或者它可能是闪存驱动器的东西....毕竟我在WINDOW CE上运行这个程序