StreamWriter, 有时候写出的文件最后部分会变成NUL

leskey 2016-01-08 01:56:34
Code如下。其实就是把某一个txt文件的内容全部读出来,变化一下line的顺序,加上一下开头结尾,然后放在myArrayList里面,最后再把myArrayListd的内容输出到另外一个文件里面。


FileStream fs = new FileStream(_file, FileMode.Append);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
for (int i = 0; i < myArrayList.Count; i++)
{
byte[] buffer = Encoding.ASCII.GetBytes(XMLArrayList[i].ToString());
string newString = Encoding.ASCII.GetString(buffer).Replace("?", "");

sw.WriteLine(newString);
buffer = null;
}
fs.Flush();
sw.Close();
fs.Close();
fs = null;
sw = null;


正常运行都没有问题,但是有时候最后生成的文件会以大量的NULNULNUL结尾,正常的内容没有了。 处理过程中不会报错!

开始怀疑是非法字符,但是源文件里面查过了,没有问题;读文件和转换格式也就是加了几个字符而已(比如时间等)

而且批处理文件的时候,几万个里面可能出现1-2个,很随机。

出错的文件重新处理的时候又都不会出错

请问可能是由于什么原因造成的呢?
...全文
883 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
leskey 2016-01-11
  • 打赏
  • 举报
回复
关键是转换失败的文件,拿回来重新运行n次,每次都成功。应该不是文件本身有什么问题吧
xuzuning 2016-01-08
  • 打赏
  • 举报
回复
你只给了从 myArrayList 输出到文件的代码 并没有给出 myArrayList 生成的代码 可能你在生成 myArrayList 时就已经有 '\0' 了(指定了长度,但未全部充填)
leskey 2016-01-08
  • 打赏
  • 举报
回复
引用 6 楼 slyzly 的回复:
myArrayList.Count的数量多余XMLArrayList的数量
sorry,copy代码的时候忘了改一下了,两个是一个东西,都是XMLArrayList,前面那个为了大家看的清除改成了myArrayList
老李家的小二 2016-01-08
  • 打赏
  • 举报
回复
多次使用的话,myArrayList每次要清空
老李家的小二 2016-01-08
  • 打赏
  • 举报
回复
.Replace("\0", "")
事理 2016-01-08
  • 打赏
  • 举报
回复
myArrayList.Count的数量多余XMLArrayList的数量
leskey 2016-01-08
  • 打赏
  • 举报
回复
我在想有没有可能是批处理的时候问题很多,执行完了要等一段时间(几秒)再把生成的文件移走。 我加了等2秒,但是还是有这个问题
leskey 2016-01-08
  • 打赏
  • 举报
回复
引用 1 楼 crystal_lz 的回复:
NUL 明显是 \0 确保你字符串末尾没有 空字符
确保没有。
老李家的小二 2016-01-08
  • 打赏
  • 举报
回复
for (int i = 0; i < myArrayList.Count; i++) { byte[] buffer = Encoding.ASCII.GetBytes(XMLArrayList[i].ToString()); string newString = Encoding.ASCII.GetString(buffer).Replace("?", ""); sw.WriteLine(newString); buffer = null; } 是一个东西吗? 在程序执行的每个环节,判断一下是否出现NUL
leskey 2016-01-08
  • 打赏
  • 举报
回复
引用 2 楼 ligyu110 的回复:
for (int i = 0; i < myArrayList.Count; i++) { byte[] buffer = Encoding.ASCII.GetBytes(XMLArrayList[i].ToString()); string newString = Encoding.ASCII.GetString(buffer).Replace("?", ""); sw.WriteLine(newString); buffer = null; } 是一个东西吗? 在程序执行的每个环节,判断一下是否出现NUL
加了,没有用。 关键是同样的文件再次执行就不会有问题啊。而且arraylist里面肯定不会有nul,之前都有判断过
crystal_lz 2016-01-08
  • 打赏
  • 举报
回复
NUL 明显是 \0 确保你字符串末尾没有 空字符
内容概要:本文围绕“Agent 工程化+ AI 编程深度实战营”展开,探讨了从AI生成代码“能跑”到系统“能交付”的工程化跃迁。课程聚焦于构建生产级Agent系统所需的核心能力,涵盖AI工具链实操、多智能体协作架构、上下文治理、稳定性与自愈机制、评估可观测性及成本控制等内容。强调从单体Agent向多Agent编队协同演进,提出“驾驭工程”理念,系统化解决上下文管理、任务分解、通信容错、自动化修复等生产难题,并引入低代码平台与组织运营模式变革的思考,推动AI开发由实验迈向规模化落地。; 适合人群:具备一定编程与系统设计基础,从事AI研发、软件工程或技术架构工作1-3年的技术人员,以及关注AI工程化落地的团队负责人和技术决策者。; 使用场景及目标:①掌握从AI代码生成到生产交付的全链路工程化方法;②设计并实现多Agent协作系统,提升任务完成率与系统稳定性;③构建可观测、可评估、可管控的AI应用体系,实现成本与性能的平衡;④推动组织层面的Agentic AI运营模式升级。; 阅读建议:此资源以实战为导向,建议结合课程提供的工具链(如Cursor、Claude Code、LangSmith等)进行 hands-on 实践,重点关注工程化设计模式与系统思维的培养,同步思考如何将Agent架构融入现有技术体系与业务流程中。

111,128

社区成员

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

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

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