能输出从1M至10G之间,指定容量的文件。以M为单位。文件全部以1来填充。 #include <iostream> #include <fstream> #include <conio.h> #include <Windows.h> #define RADIX 1024 //进制 #define OUTPUTFLAG 1 //每?M输出一次 using namespace std; int main( void ) { int MNumber = 0; //1.输入 cout << "请输入要写入文件的大小,以M为单位:(" << RADIX << "进制,比如1G=" << RADIX << "M)" << endl; cin >> MNumber; if( MNumber <= 0 ) { cout << "太小了。输入错误,按任意键退出吧你。" << endl; _getch(); return 1; } else if( MNumber > (RADIX * 10) ) { cout << "靠,居然超过10G(" << (RADIX * 10) << "M),有必要没?最大只支持10G(" << (RADIX * 10) << "M)。按任意键退出吧你。" << endl; _getch(); return 1; } //2.准备 ofstream fout("FileOut.dat", ios::out|ios::trunc); if( !fout ) { cout << "FileOut.dat打开失败。为什么呢?按任意键退出。" << endl; _getch(); return 1; } unsigned __int64 byteTotalLength = RADIX * RADIX * MNumber; unsigned __int64 bytei = 0; unsigned __int64 MCounter = 0; unsigned __int64 MOutput = RADIX * RADIX * OUTPUTFLAG; byte aByte = 1; //3.开始写入 system( "title 写入..." ); cout << "开始写入...请耐心等待。" << endl; for( bytei = 1; bytei <= byteTotalLength; bytei++ ) { if( bytei % MOutput == 0 ) { MCounter++; char ch[50] = {0}; sprintf_s( ch, 50, "%I64d", (unsigned __int64)(MCounter * OUTPUTFLAG) ); string str = "title 进度:"; str += ch; str += "M / "; sprintf_s( ch, 50, "%d", MNumber ); str += ch; str += "M "; double process = bytei * 100 * 1000 / byteTotalLength; process /= 1000; sprintf_s( ch, 50, "%0.3lf", process ); str += ch; str += "%"; system( str.c_str() ); } fout << aByte; } fout.close(); //END system( "title 写入完成" ); cout << "写入完成。按任意键退出。" << endl; _getch( ); return 0; }