C++ readdir、Windows和Chrome应用程序本机消息的奇怪错误

C++ readdir、Windows和Chrome应用程序本机消息的奇怪错误,c++,windows,google-chrome-app,chrome-native-messaging,C++,Windows,Google Chrome App,Chrome Native Messaging,我似乎遇到了一个奇怪的错误,我把它缩小到了readdir失败并且在Windows 7和8中永远不会返回的范围,但只有当与Chrome应用程序的本机消息一起使用时,并且只有当目录中存在随机但特定数量的文件时,才会出现这个错误。相关的C++代码是: char ac[10000]; std::string sData = "C:/TEST"; DIR * pdir = NULL; struct dirent * pdirent = NULL;

我似乎遇到了一个奇怪的错误,我把它缩小到了readdir失败并且在Windows 7和8中永远不会返回的范围,但只有当与Chrome应用程序的本机消息一起使用时,并且只有当目录中存在随机但特定数量的文件时,才会出现这个错误。相关的C++代码是:

char            ac[10000];
std::string     sData   = "C:/TEST";
DIR *           pdir    = NULL;
struct dirent * pdirent = NULL;

if(   ( pdir = opendir(sData.c_str()) )   != NULL   ){
 while( pdirent = readdir(pdir) ){
  sReply += "|";
  sprintf(ac ,"%s" , pdirent->d_name);
  sReply += ac;
 }
 sReply += "|";
 closedir(pdir);
}
当它是控制台应用程序的一部分时,它可以正常工作,大多数情况下,当可执行文件的一部分从Chrome打包的应用程序接收本机消息时,它会获取并返回一个包含目录中所有文件名的文本字符串,以|分隔

我在Chrome应用程序中编写了一个测试,在两次测试之间每次添加一个文件。它可以工作多次,但每次添加一定数量的文件后都会失败。例如,如果目录包含文件Tryc_3.txt、Tryc_4.txt、Tryc_5.txt。。。Tryc_65.txt每个包含文本测试,目录列表工作正常。如果我随后添加Tryc_66.txt,它将在readdirpdir失败

我尝试了不同的文件名和目录,结果都是一样的,只是失败发生在其他一些文件上。我尝试了FindFirstFile、FindNextFile和FindClose,结果完全相同。我尝试过用Wow64DisableWow64FsRedirection和Wow64RevertWow64FsRedirection包装整个过程,结果完全相同。我尝试了readdir\u r,但无法将其编译,一些网站似乎说这在Windows中不可用

我没有想法,很高兴听到任何人的线索或猜测

我可以提供完整的代码,包括Chrome应用程序,但即使在我尽可能多地剪切之后,它仍然相当大


为什么目录列表只有在与本机消息一起使用时才会失败?

如果您发布ac是什么,这会有所帮助。这是一条丢失的未知且非常重要的信息。由10000个字符组成的数组。请注意,这段代码是有效的。你能用一个简单的程序来复制这个问题吗?这个程序除了检索文件名并连接它们之外什么都不做?你所描述的通常是由于程序其他部分中的内存损坏错误造成的,而该错误恰好影响了你发布的代码。我可以用一个简单的程序来复制这个问题,但它仍然相当大-最小的Chrome应用程序似乎需要main.html、background.js、App.js,一对夫妇图标可能是可选的,我不确定,一个声明。JSON文件的应用程序,一个.jSON文件的本地消息,以及更改注册表,连同C++代码。我很乐意将它压缩并发送给任何想要它的人。好吧,如果你有readdir的源代码,你可以尝试调试它以确定崩溃发生的原因。也许无法修复它,但至少知道它为什么会发生。