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

奇妙なことに、私はあなたのコードを実行したばかりで、問題なく動作しました。最後の数値は正確に28110000です。私が変更したことの1つは、i%100==0ループにコメントすることでした。

于 2011-01-04T15:24:55.087 に答える
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 に答える
-2

私には、出力はリーダーが閉じられていないかフラッシュされていないように見えますが、コードがこれを行っていることは明らかです。

大きMath.Log10すぎる値に対して間違った値を返す可能性があります。固定のパディングサイズを試しましたか?

例外が発生した場合、ライターはアプリで閉じられません。そのためのusingステートメントを使用します。

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