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

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

请问可能是由于什么原因造成的呢?
...全文
602 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 确保你字符串末尾没有 空字符

110,538

社区成员

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

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

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