刚写的,看代码:
#include <time.h>
#include <string>
#include <iostream>
#include <FSTREAM>
using namespace std;
/*函数作用:在指定文件每行前面加行号和空格
实现思路: 考虑到文件内容可能比较大,
不大可能全部读取到内存中,添加好行号之后再输出
因此采用建立临时文件,边读边写,最后删除原文件
重命名临时文件的办法来实现
参数:strFileName,需要转化的文件名路径
*/
int AppendLineFlag(string strFileName)
{
//输入文件流,用于读取文件内容
ifstream ifReader;
//以输入方式打开文件
ifReader.open(strFileName.c_str(), ios::in);
if (!ifReader.good())
{
//如果打开文件失败,提示错误并退出
cout<<"Can not open source file:"<<strFileName<<endl;
return -1;
}
//输出文件流
ofstream ofWriter;
//原文件名后面加.tmp作为临时文件名
string strTmpFile = strFileName + ".tmp";
//以输出方式打开临时文件
ofWriter.open(strTmpFile.c_str(), ios::out);
if (!ofWriter.good())
{
//如果打开失败,提示错误
cout<<"Can not open tmp file."<<endl;
return -1;
}
string strText;//用于保存原文件每行内容
int i = 0;//保存行号,从0开始
//一行行读取原文件,直到结束
while(getline(ifReader, strText))
{
//在原文每行前加行号和空格,并输出
ofWriter<<i<<" "<<strText<<endl;
//行号加1
++i;
}
//关闭原文件和临时文件
ifReader.close();
ofWriter.close();
//尝试删除原文件,如果失败,提示错误并退出
if(0 != unlink(strFileName.c_str()))
{
cout<<"Remove file failed."<<endl;
return -1;
}
//尝试重命名临时文件,如果失败,提示错误并退出
if(0 != rename(strTmpFile.c_str(), strFileName.c_str()))
{
cout<<"Rename file failed."<<endl;
return -1;
}
return 0;
}
/*主函数
*/
int main(int argc, char *argv[])
{
string strFileName;//需要处理的文件名
cout<<"Please input file path:"<<endl;
cin>>strFileName;//由用户输入需要处理的文件名
//调用函数处理
if (0 != AppendLineFlag(strFileName))
{
cout<<"Convert file failed."<<endl;
}
else
{
cout<<"File convert ok."<<endl;
}
return 0;
}
测试截图:
test.cpp里面的内容就是这个程序源文件的副本
#include 是什么意思。。没学过
若是不用这个头文件能写不
time.h可以不要,string是C++里面的字符串类,你也可以用字符数组来处理,不过可以存在长度不够或者浪费的情况,string不需要你考虑长度的问题。我这用的都是C++标准库里的东西,要学好C++,这些都是必段要掌握的。