【发布时间】:2012-03-31 19:34:50
【问题描述】:
基本上,我有一个程序,它有一个 4 meg 的压缩文件,它必须将此文件解码为未压缩的 ~ 100 meg,然后将其压缩回 ~4 meg 文件。我需要将这个 100 兆的中间文件存储在驱动器的某个位置(不想将其保存在内存中)。
程序是用 C 语言编写的,将在 MS Windows 7 上执行。在解压缩时,不会为程序提供保证文件夹(具有写访问权限)(带有源文件的文件夹可能是只读的,带有目标文件的文件夹可能尚未指定)。
事实证明这不是一件容易的事:
1) 我读过一个 C 函数,该函数创建一个临时文件,该文件在关闭或程序终止时会消失。但是,据我了解,它会尝试在磁盘 C 上的根目录中创建文件,因此如果用户没有权限(普通用户没有权限),这显然会失败
2) 我有一个想法,使用环境/系统变量 TEMP 并在那里创建一个文件,但是在没有调整的随机 Win7 PC 上查看,我看到这个变量指向 c:/windows/temp 和那个文件夹对“用户”有特定的权限——也就是说,他们有权读取、执行、创建和写入文件,但不能删除它们、检查它们的属性等。这意味着,我假设,如果程序以用户权限运行,它将能够创建一个文件但不能删除它,因此“删除”它的唯一方法是打开文件进行写入然后关闭它,使其成为一个长度为 0 的文件。这也是不希望的,我不知道如何从 C 查询系统变量
3) 所以,基本上,我现在唯一的想法就是创建一个函数来打开文件:
- 如果可能,尝试在输出目录中创建一个临时文件
- 如果失败,尝试在输入目录中创建一个临时文件
- 如果失败,尝试从系统变量在 TEMP 目录中创建一个临时文件
- 如果失败,尝试从系统变量在 TMP 目录中创建临时文件
还有一个删除功能:
- 尝试 remove() 文件(按其名称存储在某处)
- 如果失败,它会尝试打开文件进行写入,然后关闭它,这样它就变成了一个0字节的文件
有更好的想法吗?
感谢任何帮助,谢谢!
PS:程序不能使用任何外部库,如 MFC 之类的,只能使用内置的标准 C 函数
【问题讨论】:
标签: c windows file temporary temp