gpt4 book ai didi

c - 在 labwindows cvi 应用程序中调用 FindNextFile 时清空 cFileName

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:35 27 4
gpt4 key购买 nike

我目前正在开发一个 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 位应用程序。我尝试像 this thread 中所说的那样使用 Wow64DisableWow64FsRedirection ,但这对我不起作用。

有什么想法吗?

最佳答案

在 LabWindows/CVI 中,您必须

#include <ansi_c.h>  //header collector for ansi C libraries included in CVI environment

对于以下建议的工作...

您必须使用 string copy or concatenation function 为字符串赋值,除了少数异常(exception)。

在 C 中,除了在初始化时,您不能使用 = 运算符将值赋给 char 数组(char *a; , char a[];).

例如,而类似于:

char *a = {"this is an initialization string"};
//or
char a[] = {"this is an initialization string"};

完全没问题...

这不是:

char a[80] = {0}; //okay
char b[] = {"this is a string"}; //okay still

a = b; //Not OKAY

改为使用 strcpy:

strcpy(a, b);  //the correct way

因此,在您的代码中,进行以下更改:
(假设 ListOfWavFile 是一个已经正确初始化和分配内存的 char **)

strcpy(ListOfWavFile[0], searchingFile.cFileName);//HERE
i = 1;
while(FindNextFile(handleFind, &searchingFile)) //note the addition of the last ")"
{
strcpy(ListOfWavFile[i], searchingFile.cFileName);//And HERE
i++;
}

将您的编译警告调高到最大值。
在 CVI 中它看起来像这样(或类似的,取决于版本):
enter image description here

关于c - 在 labwindows cvi 应用程序中调用 FindNextFile 时清空 cFileName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com