【发布时间】:2019-05-07 19:09:04
【问题描述】:
我想在二进制文件中查找特定字符串“fileSize”。
查找该字符串的目的是获取字符串旁边的 4 个字节,因为这 4 个字节包含我要读取的数据的大小。
二进制文件内容如下:
同一字符串在另一个位置:
另一个职位:
以下是将数据写入文件的函数:
void W_Data(char *readableFile, char *writableFile) {
ifstream RFile(readableFile, ios::binary);
ofstream WFile(writableFile, ios::binary | ios::app);
RFile.seekg(0, ios::end);
unsigned long size = (unsigned long)RFile.tellg();
RFile.seekg(0, ios::beg);
unsigned int bufferSize = 1024;
char *contentsBuffer = new char[bufferSize];
WFile.write("fileSize:", 9);
WFile.write((char*)&size, sizeof(unsigned long));
while (!RFile.eof()) {
RFile.read(contentsBuffer, bufferSize);
WFile.write(contentsBuffer, bufferSize);
}
RFile.close();
WFile.close();
delete contentsBuffer;
contentsBuffer = NULL;
}
还有,搜索字符串的函数:
void R_Data(char *readableFile) {
ifstream RFile(readableFile, ios::binary);
const unsigned int bufferSize = 9;
char fileSize[bufferSize];
while (RFile.read(fileSize, bufferSize)) {
if (strcmp(fileSize, "fileSize:") == 0) {
cout << "Exists" << endl;
}
}
RFile.close();
}
如何在二进制文件中查找特定字符串?
【问题讨论】:
-
如果你想将你的 char 数组与字符串文字进行比较,而不需要将任何内容转换为
std::string,则需要使用strcmp。fileSize == "fileSize:"不会像你期望的那样工作。 -
不确定实际的问题是什么。
-
请注意,以 9 字节块读取文件然后进行比较假定字符串
"fileSize:"在 9 字节边界上对齐。 -
使用
grep -a filesize -
@scohe001:我用过
if (strcmp(fileSize, "filesize:") == 0),但它并没有像我预期的那样工作。
标签: c++ file binary-data