如何在 C++ 中将文件内容读入字符串
我想将文件的所有内容读入字符串或其他允许我比较两个文件的方法。我正在寻找完全匹配的文件。
只是我如何打开文件并读取它有多少个字符的一小段片段。我用它来与其他文件进行比较,以检查是否有必要比较整个内容。
有没有办法可以比较两个缓冲区?
char buf[1000];
string str;
ssize_t numread;
cout<<"Enter in the full file path: ";
getline(cin,str);
int f1= open(str.c_str(), O_RDONLY);
if(f1 ==-1){
cout<<"file did not open"<<'\t'<<errno<<str<<endl;
}
int size= tell(f1);
lseek(f1,0,SEEK_SET);
numread= read(f1,buf,size);
if(numread==-1){
cout<<errno<<endl;
}
cout<<'\t'<<":"<<str<<" #Chars:"<<numread<<endl;
close(f1);
I want to read the all the contents of a file into a string or some other method that would allow me to compare two files. I am looking for files that are exact matches.
Just a little snippet of how I am opening the file and read how many characters it has. which I use to compare to other files to check if it is necessary to compare the whole contents.
Is there a way I can just compare the two buffers?
char buf[1000];
string str;
ssize_t numread;
cout<<"Enter in the full file path: ";
getline(cin,str);
int f1= open(str.c_str(), O_RDONLY);
if(f1 ==-1){
cout<<"file did not open"<<'\t'<<errno<<str<<endl;
}
int size= tell(f1);
lseek(f1,0,SEEK_SET);
numread= read(f1,buf,size);
if(numread==-1){
cout<<errno<<endl;
}
cout<<'\t'<<":"<<str<<" #Chars:"<<numread<<endl;
close(f1);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为此,请使用内存映射文件。
对于 UNIX mmap() 与 Windows MapViewOfFile()。
这将为您提供内存中映射到文件内容的指针。
为什么这是个好主意?
您不需要使用 malloc() 或 new() 为文件分配空间。
文件可以是任意大小,可以限制 32 位,但应该有 64 位版本。
比较文件
您可以使用memcmp(file1, file2, sizeofile1)
享受...
编辑 - 在 C 中添加了一些代码
Use a memory mapped file for this.
With UNIX mmap() With Windows MapViewOfFile().
This will give you a pointer in memory that maps to the contents of the file.
Why is this a good idea?
You don't need to allocate space for the file using malloc() or new().
The files can be any size, ok 32bit limit, but there should be a 64bit version.
You can compare the files using
memcmp(file1, file2, sizeoffile1)
Enjoy...
edit - added some code in C
您可以使用
istreambuf_iterator
,如此示例在 cplusplus.com 上。You could use an
istreambuf_iterator
, as this example on cplusplus.com.