Win7下CreateFile失败 异常提示:r系统找不到指定的文件

Win7下CreateFile失败 错误提示:r系统找不到指定的文件
本帖最后由 boyanglee 于 2014-02-10 22:31:45 编辑
已关闭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 能够正常运行

试过各种办法。。。百思不得其解

Win7下CreateFile失败 异常提示:r系统找不到指定的文件
------解决方案--------------------
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);