- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在开发一个 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 中它看起来像这样(或类似的,取决于版本):
关于c - 在 labwindows cvi 应用程序中调用 FindNextFile 时清空 cFileName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26659201/
我正在尝试创建一个链接列表,其中各个节点具有我的文件夹中的文件名。对于每个附加文件夹,我想输出整个链接列表以及先前已加载文件的名称。我的 C:\Intel 文件夹中有 2 个文件 - ExtremeG
我的代码有问题;) hFind = FindFirstFileEx( szPath, FindExInfoMaxInfoLevel, &FindData, FindExSearchNameMatch,
我取得了很大进展,但我有 2 个问题让我放慢了好几天。最大的问题是我想将 FindFileData.cFileName 保存为字符串,但我不能!有什么帮助吗? 最佳答案 我从这里复制了这个:How t
例如,我想在 %APPDATA% 目录中找到一个名为“DATABASE”的特定文件夹。 我试过: #include #include using namespace std; int main()
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365740%28v=vs.85%29.aspx cFileName The nam
在你提到它之前,我无法使用 Boost 文件系统。 :C 所以,我目前正在研究一个程序,该程序将文件放入由密码生成的目录中。密码中的每个字符代表一个文件夹。我现在想创建一个函数,从密码目录中检索文件,
这个问题在这里已经有了答案: How do I convert an ATL/MFC CString to a QString? (1 个回答) 关闭 6 年前。 我有一个存储在 cFilename
我目前正在开发一个 cvi 应用程序,我需要在其中检索当前构建目录的每个 .wav 文件。为了在 C 中这样做,我在以下函数中使用了 Windows 内置函数 FindFirstFIle 和 Find
我是一名优秀的程序员,十分优秀!