[C] 纯文本查看 复制代码
// toupper.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "chs");
HANDLE hIn = INVALID_HANDLE_VALUE, hOut = INVALID_HANDLE_VALUE;
DWORD nXfer, iFile, j;
TCHAR outFileName[256] = _T(""), *pBuffer = NULL;
OVERLAPPED ov = { 0, 0, 0, 0, NULL };
LARGE_INTEGER fSize;
if (argc <= 1) {
_ftprintf(stderr, _T("Usage: toupper files\n"));
exit(EXIT_FAILURE);
}
for (iFile = 1; iFile < (unsigned int)argc; iFile++) __try { /* Exception block */
if (_tcslen(argv[iFile]) > 250) {
_ftprintf(stderr, _T("文件名太长!\n"));
exit(EXIT_FAILURE);
}
_stprintf(outFileName, _T("UC_%s"), argv[iFile]);
__try {
hIn = CreateFile(argv[iFile], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hIn == INVALID_HANDLE_VALUE){
_ftprintf(stderr, _T("读文件失败!\n"));
exit(EXIT_FAILURE);
}
if (!GetFileSizeEx(hIn, &fSize) || fSize.HighPart > 0) {
_ftprintf(stderr, _T("Sorry,该文件对本程序来说太大了!\n"));
exit(EXIT_FAILURE);
}
hOut = CreateFile(outFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, CREATE_NEW, 0, NULL);
if (hOut == INVALID_HANDLE_VALUE) {
_ftprintf(stderr, _T("转换输出失败!\n"));
exit(EXIT_FAILURE);
}
/* 为转换分配缓存 */
pBuffer = (TCHAR *)malloc(fSize.LowPart);
if (pBuffer == NULL) {
_ftprintf(stderr, _T("内存分配失败!\n"));
exit(EXIT_FAILURE);
}
/*读入数据并进行转换,最后写到输出文件*/
/*完成后释放资源,然后处理下一个文件*/
if (!ReadFile(hIn, pBuffer, fSize.LowPart, &nXfer, NULL) || (nXfer != fSize.LowPart)) {
_ftprintf(stderr, _T("读文件错误!\n"));
exit(EXIT_FAILURE);
}
for (j = 0; j < fSize.LowPart; j++) /* 转换数据 */
if (isalpha(pBuffer[j]))
pBuffer[j] = toupper(pBuffer[j]);
if (!WriteFile(hOut, pBuffer, fSize.LowPart, &nXfer, NULL) || (nXfer != fSize.LowPart)){
_ftprintf(stderr, _T("写文件错误!\n"));
exit(EXIT_FAILURE);
}
} __finally { /* File handles are always closed */
/* memory freed, and handles and pointer reinitialized. */
if (pBuffer != NULL) free(pBuffer); pBuffer = NULL;
if (hIn != INVALID_HANDLE_VALUE) {
CloseHandle(hIn);
hIn = INVALID_HANDLE_VALUE;
}
if (hOut != INVALID_HANDLE_VALUE) {
CloseHandle(hOut);
hOut = INVALID_HANDLE_VALUE;
}
_tcscpy(outFileName, _T(""));
}
}
__except (EXCEPTION_EXECUTE_HANDLER) {
_tprintf(_T("异常发生,处理文件错误 %s\n"), argv[iFile]);
DeleteFile(outFileName);
}
_tprintf(_T("已经转换了所有文件!\n"));
return 0;
}