这是一段书上抄下来的代码:
#include <windows.h>
#include <stdio.h>#define BUF_SIZE 256int main(int argc, LPTSTR argv[]){
HANDLE hIn, hOut;
DWORD nIn, nOut;
CHAR Buffer[BUF_SIZE]; if(argc != 3){
printf("usage: cp file1 file2\n");
return 1;
} hIn = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hIn == INVALID_HANDLE_VALUE){
printf("Cannot open input file. Error: %x\n", GetLastError());
return 2;
} hOut = CreateFile(argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hOut == INVALID_HANDLE_VALUE){
printf("Cannot open output file. Error: %x\n", GetLastError());
return 3;
} while(ReadFile(hIn, Buffer, BUF_SIZE, &nIn, NULL) && nIn > 0){
WriteFile(hOut, Buffer, nIn, &nOut, NULL);
if(nIn != nOut){
printf("Fatal write error: %x\n", GetLastError());
return 4;
}
} CloseHandle(hIn);
CloseHandle(hOut);
return 0;
}在vs2005,xp sp2下正常编译,但是执行的时候我打:cp abc cba却提示abc文件找不到,可文件确实存在啊。如果我把argv[1]替换成L"abc",那拷贝出来的结果是目标文件变成了乱码,所以我想应该是编码的问题吧。请问我应该怎么才能让这个程序正确运行呢?谢谢

解决方案 »

  1.   

    试过了,不行啊。而且如果带上路径才可以得话,为什么我把argv[1]换成L"abc"就可以运行了呢
      

  2.   

    是路径问题,我测试换成abc还是打不开文件的提示。写全路径就没有问题,不过你可以先GetCurrentDirectory得到路径,再createfile,应该没有问题
      

  3.   

    这是windows system programming上的程序我的环境是vc++.net2003+ xp + sp2  可以正常执行
      

  4.   

    D:\workplace\sys\cp\debug>cp D:\workplace\sys\cp\debug\abc D:\workplace\sys\cp\debug\cba
    cannot open input file. error:2我就是跑不起来啊,郁闷~~~
      

  5.   

    D:\workplace\sys\cp\debug>cp D:\\workplace\\sys\\cp\\debug\\abc D:\\workplace\\sys\\cp\\debug\\cba
    Cannot open input file. Error: 3D:\workplace\sys\cp\debug>cp abc cba
    Cannot open input file. Error: 3还是不行啊,哪位大侠来解释解释吧
      

  6.   

    你确定你的debug目录下有这几个文件么?还有就是象这种程序,可以在命令行下编译的,把源程序和文本文件放在一个目录下
    用cl cp.c来编译链结,看看
      

  7.   

    项目属性里面
    Configuration Properties(配置属性)-〉General(列表第一个)-〉Character Set(字符集)
    改成Multi-Byte
      

  8.   

    to liuqiyc(cyiquil):
    果然可以了,多谢多谢。多嘴再问一句,为什么unicode就不行呢