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);
}
}
}
}