1

我正在尝试将数字 0-28,110,000 写入文本文件,用 0 填充较小的数字(信不信由你,这不是家庭作业)。

Desired Output  
00000001  
00000002  
00000003  
...  
28109999  
28110000

但是当我将其写入文本文件时,输出如下所示:

  00000001  
  00000002  
  00000003  
  ...  
  27145011  
  27

最后一个数字停在中间。任何人都可以看到为什么会发生这种情况以及我该如何纠正它?

完整代码

  long lastCode = 28110000;
        int padSize = (lastCode == 0) ? 1 : (int)Math.Log10(lastCode) + 1;

        String filename = @"C:\Documents and Settings\All Users\Desktop\" + lastCode + "_sequentialCodes.txt";
        StreamWriter writer = new StreamWriter(filename, false, Encoding.ASCII);
        writer.AutoFlush = true;

        for (int i = 1; i < lastCode + 1; i++)
        {
            writer.WriteLine(i.ToString().PadLeft(padSize, '0'));

            if (i % 100 == 0)
            {
                Console.Write(".");
            }
        }

        writer.Close();

        Console.WriteLine();
        Console.WriteLine(lastCode + " codes written to \n" + filename);
        Console.Read();
4

4 回答 4

1

您是否尝试过替换writer.Close()writer.Dispose()

我通过这种方式解决了我的类似问题。

于 2011-07-11T14:25:15.437 回答
0

用VS2008编译,用Notepad++ 5.7打开输出文本。所有 28110000 点都打印在控制台和输出文件中。你的代码是正确的,所以问题一定出在其他地方。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            long lastCode = 28110000;
            int padSize = (lastCode == 0) ? 1 : (int)Math.Log10(lastCode) + 1;

            String filename = @"C:\Documents and Settings\All Users\Desktop\" + lastCode + "_sequentialCodes.txt";
            StreamWriter writer = new StreamWriter(filename, false, Encoding.ASCII);
            writer.AutoFlush = true;

            for (int i = 1; i < lastCode + 1; i++)
            {
                writer.WriteLine(i.ToString().PadLeft(padSize, '0'));

                if (i % 100 == 0)
                {
                    Console.WriteLine(i.ToString());
                }
            }

            writer.Close();

            Console.WriteLine();
            Console.WriteLine(lastCode + " codes written to \n" + filename);
            Console.Read();

        }
    }
}

不完全是您想听到的消息,但它应该可以帮助您找到系统/设置的问题。32 位核心 2 双核,Windows XP SP3

于 2011-01-04T15:38:37.200 回答
0

奇怪,因为我刚刚运行了你的代码,它没有任何问题。最后一个数字正好是 28110000。我改变的一件事是评论 i % 100 == 0 循环。

于 2011-01-04T15:24:55.087 回答
-2

对我来说,输出看起来像阅读器没有关闭或刷新,尽管我清楚地看到你的代码这样做了。

可能Math.Log10会为太大的值返回错误的值。您是否尝试过固定的填充大小?

如果发生异常,则不会在您的应用中关闭编写器。为此使用 using 语句:

   using (StreamWriter writer = new StreamWriter(filename, false, Encoding.ASCII))
   {
       // do your stuff here
   }
于 2011-01-04T15:22:22.487 回答