繁体   English   中英

StreamWriter中的IOException

[英]IOException in StreamWriter

我正在使用StreamWriter序列化覆盖现有的xml文件。 以下是我的代码段:

using(StreamWriter sw = new StreamWriter("\\hard disk\logs\test.xml"))
{
   this.Serializer.Serialize(sw,this.StateObject);
}

由于某些原因,我经常在StreamWriter行上获得IOException,它非常普遍,在尝试调试它时没有内部异常。

实际上,StreamWriter行清除了我的test.xml文件的内容,并使其变为0字节,但同时引发了异常。 由于这个异常,序列化从未发生,所以我最终得到了一个0字节的文件。 我可以使用异常处理程序来更正这个0字节,但我对解决为什么StreamWriter首先抛出异常的原始问题更感兴趣。

你们以前曾经从StreamWriter看到过这种行为吗? 我确保您该路径是有效的,并且已验证它是否具有权限,并且没有其他进程正在访问该文件(即使我在堆栈跟踪中看到该错误)

我想知道我在Window CE上运行与它有关吗? 即使MSDN指示Window CE支持此System.IO库

编辑:

下面是我的堆栈跟踪,其中CopyData()函数是包含我的序列化代码的函数。 查看System.IO.__Error.WinIOError(Int32 errorCode, String str)行的值,我看到我的str值为“ \\ hard disk \\ logs \\ test.xml”,而errorCode为2147483648

at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync, String msgPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.IO.StreamWriter.CreateFile(String path, Boolean append)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
at System.IO.StreamWriter..ctor(String path)
at Shs.ScanPanel.CA.DataManager.DataManagercr.CopyData(Object data)
at System.Threading.Timer.ring()

2147483648是一个未记录的错误。 这是0x80000000的等效值-这不是一个定义的值。 如果文件名无效, StreamWriter仅会真正记录IOException。 如果文件名无效,则由于某些未记录的原因而发生错误。

我建议尝试直接使用其他类,如FileStreamFileFile.CreateFile.Open )直接尝试重现该问题,以查看它们是否提供了更详细的错误。

我遇到了类似的问题。 我也在读/写xml文件。 事实证明,问题是因为即使我正在使用(var writer = XmlWriter.Create(streamWriter,settings)){...}

using语句是在不关闭流并将其锁定的情况下处理xml编写器的。

要解决此问题,您需要更改xmlWriterSettings CloseOutput = true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM