C # проблема с использованием StreamWriter в текстовый файл - PullRequest
1 голос
/ 04 января 2011

Я пытаюсь записать числа 0-28,110,000 в текстовый файл с нулями, заполняющими меньшие числа (хотите верьте, хотите нет, это НЕ домашнее задание).

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 ]

1 голос
/ 11 июля 2011

Вы пытались заменить writer.Close() на writer.Dispose()?

Таким же образом я решил свою подобную проблему.

0 голосов
/ 04 января 2011

Странно, потому что я только что запустил Твой код, и он работал без проблем. Последний номер ровно 28110000. Одна вещь, которую я изменил, это комментировать цикл i% 100 == 0.

0 голосов
/ 04 января 2011

Скомпилировано с VS2008, открыт вывод текста с помощью Блокнота ++ 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 бит Core 2 Duo, Windows XP SP3

0 голосов
/ 04 января 2011

Для меня вывод выглядит так, как будто читатель не был закрыт или сброшен, хотя я ясно вижу, что ваш код делает это.

Возможно Math.Log10 возвращает неправильное значение для слишком больших значений.Вы пробовали фиксированный размер заполнения?

Если возникает исключение, средство записи не закрывается в вашем приложении.Для этого используйте оператор использования:

   using (StreamWriter writer = new StreamWriter(filename, false, Encoding.ASCII))
   {
       // do your stuff here
   }
...