高分求助:CreatFile()函数读取字符串路径失败,错误代码123(文件名、目录名或卷标语法不正确。)

时间:2023-01-03 22:35:29

DWORD fun_ScanFileSize(const wchar_t *pwchar_param_LogFile)
{
wchar_t wchar_TempFilePath[MAX_PATH] = {'\0'}; //垃圾文件路径缓冲区
wchar_t wchar_ReadBuffer = L'\0'; //逐个字符读取缓冲区
DWORD dword_NumberOfBytesToRead = 0; //读取字节计数
DWORD dword_ReadNumber = 0; //用于遍历垃圾文件路径缓冲区数组

DWORD g_dword_FileSize = 0;  //已扫描的垃圾文件容量
WIN32_FIND_DATA struct_Find; //枚举文件时需要的数据结构体



HANDLE handle_File = CreateFile(pwchar_param_LogFile,
FILE_ALL_ACCESS,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if(handle_File == INVALID_HANDLE_VALUE)
{
//读取失败则返回
return false;
}

while(ReadFile(handle_File,
   &wchar_ReadBuffer,
   2,
   &dword_NumberOfBytesToRead,
   NULL))
{
if(dword_NumberOfBytesToRead == 0)
{
//检测到文件结尾
CloseHandle(handle_File);
return g_dword_FileSize;
}

if((wchar_ReadBuffer == L'\r') || (wchar_ReadBuffer == L' ') || (wchar_ReadBuffer == L'\t'))
{
continue;
}
else if(wchar_ReadBuffer == L'\n')
{
//读取'\n'后在路径缓冲区最后一个字节添加字符串结束符
wchar_TempFilePath[dword_ReadNumber] = L'\0';


HANDLE handle_File_Size = CreateFile(wchar_TempFilePath,
FILE_ALL_ACCESS,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
DWORD dword_ErrorCode = GetLastError();
wprintf_s(L"%d", dword_ErrorCode);
g_dword_FileSize += GetFileSize(handle_File_Size,NULL)/8192;

dword_ReadNumber = 0;//重置遍历路径缓冲区数组计数器
}
else
{
//读取正常字符则拷贝到路径缓冲区里
wchar_TempFilePath[dword_ReadNumber] = wchar_ReadBuffer;
dword_ReadNumber++;
}

}

return 0;
}

9 个解决方案

#1


在函数刚进入时加断点,检查输入参数pwchar_param_LogFile的内容。

#2


引用 1 楼 buyong 的回复:
在函数刚进入时加断点,检查输入参数pwchar_param_LogFile的内容。

是下面的那个CreatFile()函数,上面的是正常的,下面的第一个参数是字符串数组,数组内容是从文件中读取来的,内容也是路径没有错,可CreatFile()就是报错

#3


哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

#4


引用 3 楼 Auro_L 的回复:
哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

这种函数一般还是路径错误了,或者你没有权限写。
路径中的"\",是不是要用双\\

#5


引用 4 楼 jerry_dqh 的回复:
Quote: 引用 3 楼 Auro_L 的回复:

哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

这种函数一般还是路径错误了,或者你没有权限写。
路径中的"\",是不是要用双\\

路径是没有错的,因为这是字符串数组,所以没必要用\\,而且我也测试过了,还是出错
我读取不是要写,而且我把第二个参数改成GENERIC_READ,还是一样的结果
最后我连函数换成FindFirstFile()还是出错,就是不能解析字符串中的路径

#6


就没有人说吗?

#7


 CreateFile  要看是否Unicode ,不匹配会出错
 这个函数实际是个宏定义为 CreateFileA,CreateFileW 中的一个。

#8


不知道楼主的问题解决了没有     在下也碰到了同样的问题    如果楼主的问题已解决,希望也能帮我一下     谢谢

#9


楼主问题解决了吗,我的也是_wfopen打开文件出这个错。解决了可以说一下吗

#1


在函数刚进入时加断点,检查输入参数pwchar_param_LogFile的内容。

#2


引用 1 楼 buyong 的回复:
在函数刚进入时加断点,检查输入参数pwchar_param_LogFile的内容。

是下面的那个CreatFile()函数,上面的是正常的,下面的第一个参数是字符串数组,数组内容是从文件中读取来的,内容也是路径没有错,可CreatFile()就是报错

#3


哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

#4


引用 3 楼 Auro_L 的回复:
哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

这种函数一般还是路径错误了,或者你没有权限写。
路径中的"\",是不是要用双\\

#5


引用 4 楼 jerry_dqh 的回复:
Quote: 引用 3 楼 Auro_L 的回复:

哪位大虾能给小弟解惑呢,已经调试12个小时了都没解决

这种函数一般还是路径错误了,或者你没有权限写。
路径中的"\",是不是要用双\\

路径是没有错的,因为这是字符串数组,所以没必要用\\,而且我也测试过了,还是出错
我读取不是要写,而且我把第二个参数改成GENERIC_READ,还是一样的结果
最后我连函数换成FindFirstFile()还是出错,就是不能解析字符串中的路径

#6


就没有人说吗?

#7


 CreateFile  要看是否Unicode ,不匹配会出错
 这个函数实际是个宏定义为 CreateFileA,CreateFileW 中的一个。

#8


不知道楼主的问题解决了没有     在下也碰到了同样的问题    如果楼主的问题已解决,希望也能帮我一下     谢谢

#9


楼主问题解决了吗,我的也是_wfopen打开文件出这个错。解决了可以说一下吗