文件的创建、删除和维护(3):创建和使用临时文件

类别:编程语言 点击:0 评论:0 推荐:

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

 

本文地址:http://com.8s8s.com/it/it23746.htm