相关疑难解决方法(0)

FileStream和StreamWriter - 如何在写入后截断文件的其余部分?

var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
    writer.Write(....);
Run Code Online (Sandbox Code Playgroud)

如果文件以前包含文本并且新写入的文本比文件中已有的文本短,那么如何确保文件中过时的尾随内容被截断?

请注意,在这种情况下,以截断模式打开文件不是一个选项.收到FileStream对象时文件已经打开.上面的代码只是为了说明流的属性.

编辑

扩展下面的答案,解决方案是:

var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
using(var writer = new StreamWriter(fs))
{
    writer.Write(....);
    writer.Flush();
    fs.SetLength(fs.Position);
}
Run Code Online (Sandbox Code Playgroud)

.net io filestream streamwriter

18
推荐指数
1
解决办法
8140
查看次数

xdocument保存添加额外的字符

我正在使用XDocument加载和保存配置文件.大部分时间它都能正常工作,但有些情况(看似随机)会在最后一个标记之后附加额外信息.这是发生了什么的要点.

配置文件预运行:

<?xml version="1.0" encoding="us-ascii"?>
<local>
</local>
Run Code Online (Sandbox Code Playgroud)

码:

XDocument config = new XDocument();
config = XDocument.Load(new FileStream(@"c:\foo.xml", FileMode.Open, FileAccess.Read));
XElement fileEle = config.Root.Element("files");
XElement statsEle = new XElement("stats");
statsEle.Add(new XElement("one", "two"));
statsEle.Add(new XElement("three", "four"));
.
.
.
fileEle.Add(statsEle);
config.Save(new FileStream(@"c:\foo.xml", FileMode.Create, FileAccess.Write), SaveOptions.None);
Run Code Online (Sandbox Code Playgroud)

配置文件运行后:

<?xml version="1.0" encoding="us-ascii"?>
<local>
    <files>
        <one>two</one>
        <three>four</three>
    </files>
</local>s>
</local>
Run Code Online (Sandbox Code Playgroud)

有什么建议?不知道为什么要添加额外的字符.有时它是额外的标签,有时它是不同的字符,有时它可以正常工作.我尝试使用不同的方法(XMLReader等)加载/保存,以不同的方式添加XML标记.在X运行之后它们都产生相同的错误.谢谢您的帮助!

.net c# xml

0
推荐指数
1
解决办法
1909
查看次数

标签 统计

.net ×2

c# ×1

filestream ×1

io ×1

streamwriter ×1

xml ×1