C#中使用StreamWriter将数组写到文件,结果不完整

gyy9911 2018-12-19 05:21:25
程序是对30000个数(范围-50000~50000)排序,我用一个arraylist保存了结果,现在要把结果写到一个txt文件里,但是最后得到的txt里最后一个数是49563(应为49999),一查发现txt中只有29858个数
经过检查,循环是确实执行完了30000遍的,但最后的一百多个数就是无法写进txt中,多次运行的结果也是卡在同样的位置
输出部分的代码如下,这是怎么回事?

StreamWriter sw = new StreamWriter(@"D:\AA学习\并行计算\project\test.txt");
for (int i = 0; i < array.Count; i++)
{
sw.Write(array[i].ToString() + ' ');
}
Console.WriteLine("写完毕");
Console.ReadKey();
...全文
1507 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-12-21
  • 打赏
  • 举报
回复
无论 C# 会替你完成什么,及时关闭自己打开的资源,都是良好的习惯

Write 总是顺序执行的,不存在什么阻塞,更没有必要再去自作多情的加上什么画蛇添足的玩意
上帝的亲哥哥 2018-12-21
  • 打赏
  • 举报
回复
你在这个循环中写入的时候,必然会引起阻塞的,以前写碰到过同样的问题,我是这样解决的:
1、在代码中添加读写锁:
private static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();//读写锁,当资源处于写入模式时,其他线程写入需要等待本次写入结束之后才能继续写入

2、调用写入时:
/// </summary>
/// <param name="strLog">文本信息</param>
public static void WriteLog(string strLog)
{
try
{

#region 写入日志信息
LogWriteLock.EnterWriteLock();

string logFilePath = GetLogFilePath();
bool result = InitialLogFile();

if (result)
{
File.AppendAllText(logFilePath, PreSpace + strLog + "\r\n");
}
#endregion
}
catch
{

}
finally
{
LogWriteLock.ExitWriteLock();
}
}
平底锅锅锅 2018-12-21
  • 打赏
  • 举报
回复
             
using (StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default))
{
sw.WriteLine(str);
sw.Flush();
sw.Close();
}
老夏 2018-12-20
  • 打赏
  • 举报
回复
用using,可避免忘了调用Close():
using(StreamWriter sw = new StreamWriter(@"D:\AA学习\并行计算\project\test.txt"))
{
for (int i = 0; i < array.Count; i++)
{
sw.Write(array[i].ToString() + ' ');
}
}
  • 打赏
  • 举报
回复
数据无法写入文件 --> 在进程的输入缓冲区的数据无法写入文件
  • 打赏
  • 举报
回复
close 或者 flush。因为你的阻塞语句卡死了 UI 主线程,数据无法写入文件。
吉普赛的歌 2018-12-19
  • 打赏
  • 举报
回复
恭喜。 也可以用 File.WriteAllLines 试试, 事先改用字符串数组来存储。
gyy9911 2018-12-19
  • 打赏
  • 举报
回复
找到问题了,是没用Close()方法把StreamWriter 关闭 https://blog.csdn.net/zzq900503/article/details/8783636

111,097

社区成员

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

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

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