Win7下CreateFile失败 异常提示:r系统找不到指定的文件
Win7下CreateFile失败 错误提示:r系统找不到指定的文件
已关闭WIN7的UAC控制,操作系统为Win7-64位旗舰版 编译环境为 VS2013 Express
同样代码在32位xp下VS2010 能够正常运行
试过各种办法。。。百思不得其解

------解决方案--------------------
VS2013 默认是 Unicode 编码的,你 CreateFile 调用的是 CreateFileW 自然路径就是错误的。你直接用 CreateFileA 就行,argv 就是 ANSI 编码。
------解决方案--------------------
帮你简单改了下:
已关闭WIN7的UAC控制,操作系统为Win7-64位旗舰版 编译环境为 VS2013 Express
#include <Windows.h>
#include <stdio.h>
#define BUF_SIZE 256
//Show error message of GetLastError()
void ShowSystemError();
int main(int argc, LPTSTR argv[])
{
HANDLE hIn, hOut;
DWORD nIn, nOut;
CHAR buffer[BUF_SIZE];
if (argc != 3)
{
printf("Usage: cpw file1 file2\n");
return 1;
}
printf("%s\n", argv[1]);
printf("%s\n", argv[2]);
hIn = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hIn == INVALID_HANDLE_VALUE)
{
printf("Cannot open input file. Error: %x\n", GetLastError());
ShowSystemError();
return 2;
}
....
同样代码在32位xp下VS2010 能够正常运行
试过各种办法。。。百思不得其解
------解决方案--------------------
VS2013 默认是 Unicode 编码的,你 CreateFile 调用的是 CreateFileW 自然路径就是错误的。你直接用 CreateFileA 就行,argv 就是 ANSI 编码。
------解决方案--------------------
帮你简单改了下:
int main(int argc, char *argv[])
{
HANDLE hIn, hOut;
DWORD nIn, nOut;
BYTE buffer[BUF_SIZE];
if (argc != 3)
{
printf("Usage: cpw file1 file2\n");
return 1;
}
printf("%s\n", argv[1]);
printf("%s\n", argv[2]);
hIn = CreateFileA(argv[1], GENERIC_READ
------解决方案--------------------
GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hIn == INVALID_HANDLE_VALUE)
{
printf("Cannot open input file. Error: %x\n", GetLastError());
ShowSystemError();
return 2;
}
hOut = CreateFileA(argv[2], FILE_GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hOut == INVALID_HANDLE_VALUE)
{
printf("Cannot open input file. Error: %x\n", GetLastError());
CloseHandle(hIn);
return 3;
}
while (ReadFile(hIn, (LPVOID)buffer, BUF_SIZE, &nIn, NULL) && nIn > 0)
{
WriteFile(hOut, (LPCVOID)buffer, nIn, &nOut, NULL);
if (nIn != nOut)
{
printf("Fatal write error: %x\n", GetLastError());
CloseHandle(hIn);
CloseHandle(hOut);
return 4;
}
}
CloseHandle(hIn);
CloseHandle(hOut);
return 0;
}
//Show error message of GetLastError()
void ShowSystemError()
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
------解决方案--------------------
FORMAT_MESSAGE_FROM_SYSTEM
------解决方案--------------------
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&lpMsgBuf,
0,
NULL
);
MessageBox(NULL, lpMsgBuf, _T("Error"), MB_OK
------解决方案--------------------
MB_ICONINFORMATION);
LocalFree(lpMsgBuf);