我目前正在开发一个 cvi 应用程序,我需要在其中检索当前构建目录的每个 .wav 文件。为了在 C 中这样做,我在以下函数中使用 Windows 内置函数 FindFirstFIle 和 FindNextFile:
int listingWavFileNameInDirectory( char projectDirectory[MAX_PATHNAME_LEN], int numberOfWavFile, char **ListOfWavFile)
{
WIN32_FIND_DATA searchingFile;
HANDLE handleFind = NULL;
char workingPath[2048];
sprintf(workingPath, "%s\\*.wav*", projectDirectory);
if( (handleFind = FindFirstFile(workingPath, &searchingFile)) != INVALID_HANDLE_VALUE)
{
ListOfWavFile[0] = searchingFile.cFileName;
i = 1;
while(FindNextFile(handleFind, &searchingFile)
{
ListOfWavFile[i] = searchingFile.cFileName;
i++;
}
if( !FindClose(handleFind))
return GetLastError();
return 0;
}
else
{
return GetLastError();
}
}
此函数适用于第一个 wav 文件(ListOfWavFile[0] 具有正确的字符串),但不适用于通过 FindNextFile 获取并包含 ListOfWavFile[i] 的其他文件名。ListOfWavFile[i] 实际上是一个空字符串。我只是不明白为什么。这是我对前面函数的调用:
GetProjectDir(projectDirectory);
numberOfWavFile = countingWavFileInDirectory(projectDirectory);
listOfWavFile = malloc(numberOfWavFile * sizeof(char *));
for(int i = 0; i < numberOfWavFile; i++)
{
listOfWavFile[i] = malloc(256 * sizeof(char));
}
listingWavFileNameInDirectory(projectDirectory, numberOfWavFile, listOfWavFile);
我在 Windows 7 64 位上,我的应用程序被编译为 64 位应用程序。我尝试像在这个线程中所说的那样使用 Wow64DisableWow64FsRedirection ,但它对我不起作用。
有任何想法吗 ?