应用程序可以使用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;
}