在C,MS Windows系统中创建临时文件

Ist*_*tel 6 c windows file temporary temp

基本上,我有被赋予了4兆的压缩文件中的程序,它具有解码此文件为非压缩〜100微克,然后压缩它放回〜4微克文件.我需要将这个中间100兆字节文件存储在驱动器上的某个位置(不要将其保留在内存中).

程序是用C语言编写的,将在MS Windows 7上执行.在解压缩时,没有保证文件夹(具有写访问权限)给予程序(源文件的文件夹可能是只读的,带有目标文件的文件夹可能不是但指定).

事实证明这不是一件容易的事:

1)我已经读过一个C函数,它创建一个临时文件,当关闭或程序终止时它会消失.但是,从我的理解它试图使磁盘C上的文件,在根目录下,如果用户有没有权利,这将明显失败(其中普通用户犯规)

2)我有一个想法,使用环境/系统变量TEMP并在那里创建一个文件,但看着一个随机的Win7 PC没有调整,我看到这个变量指向c:/ windows/temp,该文件夹具有特定的权利对于"用户" - 也就是说,他们有权读取,执行,创建和写入文件,但不能删除它们,检查它们的属性等.这意味着,我认为,如果程序是使用用户权限运行的,它将会能够创建一个文件但不能删除它,所以"删除"它的唯一方法是打开文件进行写入然后关闭它,使其成为0长文件.这也是不希望的,我不知道如何从C查询系统变量

3)所以,基本上,我现在唯一的想法是创建一个函数来打开以下文件:

  • 尝试在输出目录中创建临时文件(如果可能)
  • 如果失败,尝试在输入目录中创建临时文件
  • 如果失败,尝试从系统变量创建TEMP目录中的临时文件
  • 如果失败,尝试从系统变量在TMP目录中创建临时文件

和删除功能:

  • 尝试删除()文件(通过其存储在某处的名称)
  • 如果失败,它会尝试打开文件进行写入,然后将其关闭,这样它就变成了一个0字节的文件

有更好的想法吗?

任何帮助表示赞赏,谢谢!

PS:程序不能使用任何外部库,如MFC等,只能使用内置的标准C函数

Rom*_* R. 6

GetTempPath

检索为临时文件指定的目录的路径.

GetTempFileName

为临时文件创建名称.如果生成了唯一的文件名,则会创建一个空文件并释放其句柄; 否则,仅生成文件名.

这两个为您提供了获取临时文件的位置和名称的简便方法.

UPD:MSDN上的代码示例:创建和使用临时文件.