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个,很随机。

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

请问可能是由于什么原因造成的呢?
...全文
884 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 确保你字符串末尾没有 空字符
内容概要:本文介绍了基于Matlab代码实现的电力系统机组组合优化调度方法,适用于IEEE14、IEEE30和IEEE118节点标准测试系统。该资源聚焦于电力系统中发电机组的优化调度问题,通过智能优化算法实现对机组启停、出力分配等决策的最优化,旨在降低运行成本、提升系统可靠性和经济性。文中系统阐述了从数学模型构建、多类型约束处理到优化算法设计与仿真实验验证的完整研究流程,并提供了可复现的Matlab代码,涵盖目标函数设定、约束条件建模及算法求解过程,适用于电力系统调度、能源优化等相关领域的科研与教学实践。; 适合人群:具备电力系统分析、运筹学基础及Matlab编程能力的高校学生、科研人员和工程技术人员,尤其适合从事电力系统优化、智能算法应用研究的研究生与青年学者。; 使用场景及目标:①用于电力系统机组组合(UC)问题的教学实验与课程设计;②支撑科研工作中对遗传算法、粒子群算法等智能优化算法在电力系统调度中应用的研究;③为含可再生能源接入的现代电网调度提供仿真平台与技术参考,助力低碳电力系统规划与运行。; 阅读建议:建议读者结合电力系统调度理论与优化建模知识,深入理解机组组合问题的数学本质与物理约束,再通过Matlab代码进行仿真实践,重点关注算法收敛性、多目标权衡策略与不同测试系统间的性能对比,以实现理论与实践的深度融合。

111,128

社区成员

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

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

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