我正在使用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()
答案 0 :(得分:1)
2147483648是未记录的错误。它是等价的0x80000000 - 这不是一个定义的值。 StreamWriter
只有真正的文档如果文件名无效,则会发生IOException。如果文件名无效,则由于某些未记录的原因而发生错误。
我建议您尝试直接使用FileStream
或File
(File.Create
或File.Open
)等其他类来尝试重现问题,看看它们是否提供了更详细的错误。
答案 1 :(得分:0)
我遇到了类似的问题。我也在读/写xml文件。原来问题是因为即使我在使用 using(var writer = XmlWriter.Create(streamWriter,settings)){...}
using语句是在不关闭流并锁定它的情况下处理xml writer。
要解决此问题,您需要更改xmlWriterSettings CloseOutput = true