用C# 生成从00000000-99999999的TXT文本

00000000
00000001
00000002
00000003
00000004
......
99999999
正好一亿行
我用批处理生成速度好慢,请问用C#能快速实现吗?

FileStream fs = new FileStream("D:\target.txt", FileMode.Append);
StreamReader sr = new StreamReader(fs);
for(int64 i = 1; i < 100000000; i++)
{
string str = int64ToStr(i);
sr.WriteLine(str);
}
sr.Close();
fs.Close();

public string int64ToStr(int64 intNum)
{
string targetStr = string.Empty;
int bits = CalcIntBit(intNum);
switch(bits)
{
case 1:
targetStr = "0000000" + intNum.ToString();
break;
case 2:
targetStr = "000000" + intNum.ToString();
break;
case 3:
targetStr = "00000" + intNum.ToString();
break;
case 4:
targetStr = "0000" + intNum.ToString();
break;
case 5:
targetStr = "000" + intNum.ToString();
break;
case 6:
targetStr = "00" + intNum.ToString();
break;
case 7:
targetStr = "0" + intNum.ToString();
break;
case 8:
targetStr = intNum.ToString();
break;
default:
break;
}
return targetStr;
}

public int CalcIntBit(int64 intNum)
{
int64 tmp = intNum/10;
int bits = 1;
while(tmp)
{
tmp =/ 10;
Bits++;
}
return Bits;
}


其实就是写文本消息,楼主你可以现生产部分字符串,然后写入文本文件。。

举例: 先写 1000,0000 到文件,然后分多次写入。。

代码手打的,没用VS编辑器,有的函数调用可能有问题.. 一种比较笨的思路

如果考虑到效率问题的话,可以合并字符串,比如说100个写一次文件,可以减少点时间。

没条件测试,不好意思

 class Program
    {
        static string FilePath = Path.GetFullPath("test.txt");
        static void Main(string[] args)
        {
            Encoding encoding = Encoding.Default;
            Stopwatch watch = new Stopwatch();
            using (FileStream stream = File.Create(FilePath))
            {
                watch.Start();
                foreach (string lines in GetNums(0, 99999999, 1, 100, 9))
                {
                    byte[] buffer = encoding.GetBytes(lines);
                    stream.Write(buffer, 0, buffer.Length);
                }
                watch.Stop();
                Console.WriteLine("Finish:" + watch.ElapsedMilliseconds);
            }
        }
        /// <summary>
        /// 取数据
        /// </summary>
        /// <param name="min">最小值(含)</param>
        /// <param name="max">最大值(含)</param>
        /// <param name="skip">步进</param>
        /// <param name="cacheLines">缓存的行数</param>
        /// <param name="zero">位数</param>
        /// <returns></returns>
        static IEnumerable<string> GetNums(int min, int max, int skip, int cacheLines, int zero)
        {
            string format = string.Format("{{0:{0}}}\r\n", new string('0', zero));
            StringBuilder stringBuilder = new StringBuilder((zero + 2) * cacheLines);
            for (int num = min, lines = 0; num <= max; num += skip, lines++)
            {
                stringBuilder.AppendFormat(format, num);
                if (++lines % cacheLines == 0 || num == max)
                {
                    lines = 0;
                    yield return stringBuilder.ToString();
                    stringBuilder.Remove(0, stringBuilder.Length - 1);
                }
            }
        }
    }