从C++中非常大的文本文件资源读取
Reading from a very large text file resource in C++
我们在文本文件中有一些数据,这些数据作为自定义资源内置到我们的可执行文件中,以便在运行时读取。此文本文件的大小超过 700 万个字符。
我可以成功地在资源中搜索和定位出现在文本文件顶部附近的字符串,但是当尝试搜索几百万个字符以下的术语时,strstr 返回 NULL,指示找不到该字符串。可以存储在 char* 中的字符串文本的长度或可以存储在嵌入资源中的数据量是否有限制?代码如下所示
char* data = NULL;
HINSTANCE hInst = NULL;
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(IDR_TEXT_FILE1), "TESTRESOURCE");
if(NULL != hRes)
{
HGLOBAL hData = LoadResource(hInst, hRes);
if (hData)
{
DWORD dataSize = SizeofResource(hInst, hRes);
data = (char*)LockResource(hData);
}
else
break;
char* pkcSearchResult = strstr(data, "NumListDetails");
if ( pkcSearchResult != NULL )
{
// parse data
}
}
谢谢。
问题可能是您用于搜索的方法。 strstr
使用 ANSI 字符串,并在搜索域中遇到"\0"时终止。
您可以使用类似 memstr
的东西(可以在此处找到许多实现之一)。
您是否从 GetLastError() 获得任何输出,特别是在调用 SizeofResource
之后。
您还可以检查该dataSize > 0
以确保未发生错误。
DWORD dataSize = SizeofResource(hInst, hRes);
if(dataSize > 0)
{
data = (char*)LockResource(hData);
}
else
{
//check error codes
}
MSDN 文档
问题是数据中的空字符过早地结束了 char* 变量。为了解决这个问题,我只需要将数据读取到一个 void 指针中,然后将其复制到动态创建的数组中。
DWORD dataSize = SizeofResource(hInst, hRes);
void* pvData = LockResource(hData);
char* pcData = new char[dataSize];
memcpy_s(pcData,strlen(pcData),pvData,dataSize);
相关文章:
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 已修改的LinkedList未在文本文件本身中更新
- C++文本文件的获取线
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- 打印逐行存储的文本文件
- C++文本文件输入