关于C++ Filecopy.cpp的困惑……
#include <iostream>#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if (argc != 3)
{
cerr << "Error! \n 输出样式:filecopy.exe 复制文件名称 新文件名称" << endl;
return 0;
}
ifstream f_read (argv,ios::binary | ios::in);
ofstream f_write(argv,ios::binary | ios::out);
char i;
if (f_read == NULL)
{
cout << "要复制的文件不存在!" << endl;
return 0;
}
while (f_read >> i)
{
f_write << i;
}
cout << "成功复制!" << endl;
f_read.close();
f_write.close();
return 0;
}{:7_154:}为毛TXT中空字符(回车,空格等)复制不了……复制得到的EXE文件也会报错。大小都不一样- -
求解释……
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
if (argc != 3)
{
cerr << "Error! \n 输出样式:filecopy.exe 复制文件名称 新文件名称" << endl;
return 0;
}
ifstream f_read (argv,ios::binary | ios::in);
ofstream f_write(argv,ios::binary | ios::out);
char i;
if (f_read == NULL)
{
cout << "要复制的文件不存在!" << endl;
return 0;
}
while (/*f_read >> i*/ f_read.read(&i,1))
{
//f_write << i;
f_write.write(&i,1);
}
cout << "成功复制!" << endl;
f_read.close();
f_write.close();
return 0;
}运算符>>和<<只能用于处理文本文件,既然以二进制形式打开,就要用二进制的读写函数read和write。此外,文本文件也是二进制文件,所以该程序也使用于文本文件 是不是 文件只读了啊?
或者是 TXT设置了 自动换行什么的 liao0202 发表于 2013-7-20 11:04 static/image/common/back.gif
是不是 文件只读了啊?
或者是 TXT设置了 自动换行什么的
不是这个问题……取消自动换行同样如此…… {:7_154:}为毛沉了? 仰望天上的光 发表于 2013-7-20 10:37 static/image/common/back.gif
运算符>>和
{:7_178:}光大,再问个问题。
怎样实现删除文本文件中某一行记录。
我尝试过自身文件读写。把要删除的行不写入。但这样貌似会造成文件内部指针混乱(就用一个文件指针)。
我又用两个文件指针。一个读。一个写。指向同一个文件。但这样也无效。好像写的那个根本不实现写入。
- -求解。 Potato丶 发表于 2013-7-21 12:18 static/image/common/back.gif
光大,再问个问题。
怎样实现删除文本文件中某一行记录。
如果文件不大,把文件的所有内容都读到一个二维字符数组里(要删除的那行不读),然后把这个二维字符数组覆盖写入原文件。
如果文件很大,不适合把整个文件内容一次性存到数据结构里,那么就新建一个临时文件,每读一行,若该行不需删除,就写入临时文件。全部处理完毕后,删除源文件,再给临时文件重命名。
对于同一个文件,用两个文件指针既读又写很难操作。一是读操作和写操作间必须调用一次fseek函数,否则读写状态不能转换过来;二是因为你删除了一行的内容,就必须把此行后面所有的内容都向前移动。所以对于文件的既读又写的操作实际上更多地采用前面两种办法。
仰望天上的光 发表于 2013-7-21 12:29 static/image/common/back.gif
如果文件不大,把文件的所有内容都读到一个二维字符数组里(要删除的那行不读),然后把这个二维字符数组 ...
{:7_158:}写入文件如此简单。要删除一行这么麻烦。
前两种方法倒是想过。只是觉得效率太低了。 本帖最后由 小佩 于 2017-10-27 10:24 编辑
没有使用main()函数中的参数
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
string infile,outfile;
cout<<"输出格式:复制文件名称 新文件名称"<<endl;
getline(cin,infile,'\n');
getline(cin,outfile,'\n');
ifstream imread(infile,ios::in);
ofstream imwrite(outfile, ios::out);
if(imread==NULL)
cout<<"打开文件失败!";
char i;
while(imread>>i)
imwrite<<i;
cout<<"成功复制!";
imread.close();
imwrite.close();
} int main(int argc, char* argv[]){
if( argc != 3 )
{
cerr << "输入形式: copyFile 源文件名 目标文件名 \n" << endl;
return 0;
}
ifstream in(argv, ios::binary|ios::in);
if(!in){
cerr <<"输入形式: copyFile 源文件名 目标文件名 \n" << endl;
return 0;
}
ofstream out(argv, ios::binary|ios::out);
if(!out){
cerr << "输入形式: copyFile 源文件名 目标文件名 \n" << endl;
in.close();
return 0;
}
char x;
in.seekg(0, ios::beg);
while(in.peek() != EOF){
in.read((char* )&x, 1024);
out.write((char* )&x, 1024);
}
in.close();
out.close();
cout << "成功复制!" << endl;
return 0;
}
加了个一次读取多少字节,复制大文件,明显快很多 >> 这个吃掉了换行符和空格
ooooooo
页:
[1]