C#的 System.IO.File.WriteAllText一些问题

pop123156456456 2016-12-02 01:59:45
这个代码能够写出文件,楼主的程序基本上每隔一段时间就会保存一段配置.
但是诡异的事情发生了,程序出现意外崩溃,或者运行的时候中断电脑电源,配置就会丢失一部分或者变空.
请问下有谁知道这是怎么回事吗?
System.IO.File.WriteAllText(name, text, Encoding.UTF8);
...全文
1746 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36645000 2020-06-02
  • 打赏
  • 举报
回复
还有我好奇,这个函数我怎么知道 写入完成了??
狼狗李戈朗 2021-07-08
  • 举报
回复
@qq_36645000 可以在代码加入一句 Console.WriteLine("写入成功!");
南天空 2016-12-02
  • 打赏
  • 举报
回复
这种写文件的方式是覆盖式的,如果写到一半或者清完准备写等情况下,会导致文件内容缺失或者损坏。你可以试试StringBulider,其中有append等方法,是追加式的,也许能解决你的问题。
pop123156456456 2016-12-02
  • 打赏
  • 举报
回复
引用 3 楼 Libby1984 的回复:
你说的情况就是文件还在写的过程中出现意外导致文件没有写完就停止了。 要防止这种情况你需要在写配置之前将原来的配置文件备份。如果写配置成功,再将备份删掉。 建议你在文件的结尾增加一个校验,比如一串特殊的字符,每次读配置之前先查看校验,如果有说明配置文件正常,如果没有则说明配置文件无效,删掉无效配置,读取原先备份的配置文件。
谢谢
pop123156456456 2016-12-02
  • 打赏
  • 举报
回复
引用 2 楼 u011981242 的回复:
System.IO.File.WriteAllText(name, text, Encoding.UTF8);是重写文件 文件部分丢失/全部为空就是异常导致在删除内容还未写入被直接保存 可以做一个防错,将更新的文件先保存在name2中,然后删除name,将name2改名为name
我也是这个思路,看样子也只能如此了
  • 打赏
  • 举报
回复
正在写的过程中,电脑断电什么的,可能会导致磁盘损坏,然后文件损坏
  • 打赏
  • 举报
回复
你说的情况就是文件还在写的过程中出现意外导致文件没有写完就停止了。 要防止这种情况你需要在写配置之前将原来的配置文件备份。如果写配置成功,再将备份删掉。 建议你在文件的结尾增加一个校验,比如一串特殊的字符,每次读配置之前先查看校验,如果有说明配置文件正常,如果没有则说明配置文件无效,删掉无效配置,读取原先备份的配置文件。
  • 打赏
  • 举报
回复
System.IO.File.WriteAllText(name, text, Encoding.UTF8);是重写文件 文件部分丢失/全部为空就是异常导致在删除内容还未写入被直接保存 可以做一个防错,将更新的文件先保存在name2中,然后删除name,将name2改名为name
EnForGrass 2016-12-02
  • 打赏
  • 举报
回复
既然是报错一段配置信息,怎么会变空呢? 如果意外断电这种,感觉就没办法了

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧