Кажется, я столкнулся со странной ошибкой, которую я сузил до 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 Packaged App, — получает и возвращает текстовую строку со всеми именами файлов в каталоге, разделенными «|».
Я написал тест в свое приложение Chrome, добавляя один файл за раз между испытаниями. Он работает несколько раз, но затем завершается ошибкой каждый раз, когда добавляется некоторое количество файлов. Например, если каталог содержит файлы Tryc_3.txt, Tryc_4.txt, Tryc_5.txt … Tryc_65.txt (каждый из которых содержит текст «test»), список каталогов работает просто отлично. Если я затем добавлю Tryc_66.txt, то произойдет сбой в readdir (pdir).
Я пробовал разные имена файлов и каталогов с одинаковым результатом, за исключением того, что сбой происходит на каком-то другом количестве файлов. Я пробовал FindFirstFile, FindNextFile и FindClose с точно такими же результатами. Я попытался обернуть все это с Wow64DisableWow64FsRedirection и Wow64RevertWow64FsRedirection с точно такими же результатами. (Я пробовал readdir_r, но не смог его скомпилировать, и некоторые сайты, похоже, говорят, что это недоступно в Windows).
У меня нет идей, и я рад услышать любые подсказки или предположения, которые кто-либо имеет.
Я могу предоставить полный код, включая приложение Chrome, но он довольно большой даже после того, как я вырежу столько, сколько смогу.
Почему список каталогов не будет работать только при использовании с Native Messaging?
Задача ещё не решена.