应用程序可以使用GetTempFileName()函数来获取临时文件的文件名,而GetTempPath()将返回创建临时文件的目录的路径。 下面的例子将一个文件复制到另一个文件。目标文件将对源文件中的内容进行大写转换。 应用程序使用CreateFile()打开文件Original.txt 。然后,应用程序使用GetTempFileName()函数来获取临时文件的文件名,再用CreateFile()来创建临时文件。应用程序从源文件中读取4k内容并存放入缓冲中,然后在缓冲中将内容改为大写,再将修改后的内容写到临时文件。当源文件所有内容都转换并写入临时文件后,应用程序将关闭这两个文件,然后用MoveFileEx()函数将临时文件改名为Allcaps.txt 。 #include <windows.h> #include <stdio.h>
#define BUFSIZE 4096
int main() { HANDLE hFile; HANDLE hTempFile; DWORD dwBytesRead, dwBytesWritten, dwBufSize=BUFSIZE; char szTempName[MAX_PATH]; char buffer[BUFSIZE]; char lpPathBuffer[BUFSIZE]; // 打开源文件 hFile = CreateFile("original.txt", // 文件名 GENERIC_READ, // 读文件 0, // 不共享 NULL, // 默认安全属性 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //不使用临时文件 if (hFile == INVALID_HANDLE_VALUE) { printf("Could not open file."); return 0; } // 获取临时文件路径
GetTempPath(dwBufSize, lpPathBuffer);
//创建临时文件 GetTempFileName(lpPathBuffer, // 临时文件目录 "NEW", // 临时文件文的前缀 0, // 创建唯一的名字 szTempName); // 保存名字的缓冲
hTempFile = CreateFile((LPTSTR) szTempName, // 文件名 GENERIC_READ | GENERIC_WRITE, // 用于读写操作 0, // 不共享 NULL, // 默认安全属性 CREATE_ALWAYS, // 可重写已有文件 FILE_ATTRIBUTE_NORMAL, NULL);
if (hTempFile == INVALID_HANDLE_VALUE) { printf("Could not create temporary file."); return 0; } // 读取4k内容并存放入缓冲中 // 在缓冲中将内容改为大写 // 将修改后的内容写到临时文件 do { if (ReadFile(hFile, buffer, 4096, &dwBytesRead, NULL)) { CharUpperBuff(buffer, dwBytesRead); WriteFile(hTempFile, buffer, dwBytesRead, &dwBytesWritten, NULL); } } while (dwBytesRead == BUFSIZE); //关闭文件 CloseHandle(hFile); CloseHandle(hTempFile); // 该文件名 if (!MoveFileEx(szTempName, "allcaps.txt", MOVEFILE_REPLACE_EXISTING)) { printf("Could not move temp file."); return 0; } return 0; }

|