gpt4 book ai didi

调用函数FindNextFile抛出访问冲突异常

转载 作者:行者123 更新时间:2023-11-30 15:47:20 25 4
gpt4 key购买 nike

我使用 Win32 API 编写了一个 C 程序 FindNextFile查找文件

#include<stdio.h>
#include<tchar.h>
#include<windows.h>

int _tmain(int argc, TCHAR *argv[])
{
HANDLE hNextFile;
WIN32_FIND_DATA findFileData;
LPCTSTR fileName = argv[1]; //input argument "C:\test\file*.txt"

hNextFile = FindFirstFile(fileName, &findFileData);

while(hNextFile != INVALID_HANDLE_VALUE)
{
printf("long name: %s\t8dot3 name: %s\n", findFileData.cFileName, findFileData.cAlternateFileName);
hNextFile = FindNextFile(fileName, &findFileData); //Unhandled exception here!
}
printf("%s", GetLastError());
return 0;
}

第一次调用FindNextFile时,抛出异常。异常信息:

Unhandled exception at 0x77178dc9 in findfile.exe: 0xC0000005: Access violation writing location 0x005c0080.

你能给我一些建议吗?

提前致谢。

<小时/>

我已经这样修改了我的代码,它工作得很好。感谢皮埃尔的解释。

#include<stdio.h>
#include<tchar.h>
#include<windows.h>

int _tmain(int argc, TCHAR *argv[])
{
HANDLE hNextFind;
WIN32_FIND_DATA findFileData;
LPCTSTR fileName = argv[1];
BOOL result = TRUE;

if((hNextFind = FindFirstFile(fileName, &findFileData)) == INVALID_HANDLE_VALUE)
return 1;

while(result)
{
_tprintf(TEXT("long name: %s\t8dot3 name: %s\n"), findFileData.cFileName, findFileData.cAlternateFileName);
result = FindNextFile(hNextFind, &findFileData);
}
FindClose(hNextFind);
return 0;
}

最佳答案

您的代码中有很多错误。

  • 首先,你没有正确使用FindNextFile,原型(prototype):

    BOOL WINAPI FindNextFile(
    _In_ HANDLE hFindFile,
    _Out_ LPWIN32_FIND_DATA lpFindFileData
    );
  • 之后,您没有正确使用 GetLastError(),从而引发异常。 GetLastError 返回一个 DWORD,您可以将其打印为字符串。 (http://msdn.microsoft.com/en-us/library/ms679360(v=vs.85).aspx)

以下是您的代码应如下所示的示例:

#include<stdio.h>
#include<tchar.h>
#include<windows.h>

int _tmain(int argc, TCHAR *argv[])
{
HANDLE hNextFile;
WIN32_FIND_DATA findFileData;
LPCTSTR fileName = argv[1]; //input argument "C:\test\file*.txt"

hNextFile = FindFirstFile(fileName, &findFileData);
BOOL res = TRUE;
//^^^^^^^^^^^^^^^^

while(hNextFile != INVALID_HANDLE_VALUE && res)
// ^^^^^^
{
printf("long name: %s\t8dot3 name: %s\n", findFileData.cFileName, findFileData.cAlternateFileName);
res = FindNextFile(hNextFile, &findFileData); //Unhandled exception here!
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
printf("%d", GetLastError());
// ^^ // You can also use FormatMessage as it is said in the documentation
return 0;
}

关于调用函数FindNextFile抛出访问冲突异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483301/

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