16,472
社区成员
发帖
与我相关
我的任务
分享
#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;
}
....
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);
}
hIn = CreateFile(TEXT("a.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
...
hOut = CreateFile(TEXT("b.txt"), FILE_GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
可以正常复制a.txt为b.txt 但是我想反问argv参数啊#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 | 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 = CreateFile(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, buffer, BUF_SIZE, &nIn, NULL) && nIn > 0)
{
WriteFile(hOut, 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, (LPCTSTR)lpMsgBuf, (LPCWSTR)"Error", MB_OK | MB_ICONINFORMATION);
LocalFree(lpMsgBuf);
}