在 Windows 中从纯 C 创建一个唯一的临时目录

标签 c windows winapi temporary-directory

我想在 Windows 中从一些 C 创建一个唯一的临时目录 代码(不是 C++ 或 C#)。我想这样做,这样我就可以放一些温度 目录中的文件,然后在完成后轻松删除它们 (通过递归删除目录)。

我基本上是在寻找 linux 的等价物 mkdtemp 功能。有一个 C# 答案 here , 以及对 this question 的回应 建议使用升压。但是因为我使用的是 C,所以这些解决方案不起作用 对我来说。

到目前为止我能想到的最好的方法是使用 GetTempFileName 其次是 CreateDirectory , 但问题是如果我问 GetTempFileName 要创建一个唯一的文件名,它还会创建文件(我 不想,因为我想创建一个目录)。

相关的还有 GetTempPath , 从环境中返回用户临时文件夹的位置 变量 - 但因为我想创建自己的目录,所以我可以 稍后安全删除,我仍然需要在任何内部创建一个目录 它将返回的路径。

看起来如果我想创建一个唯一的目录,我将不得不 创建一个临时文件,获取名称,删除它,然后创建一个 同名目录 - 听起来很乱。 还有其他想法吗?

最佳答案

您可以使用 GetTempPath 返回的内容与 Guid 连接以确保目录的唯一性。您可以使用 UuidCreate 创建一个 Guid或 CoCreateGuid Function .

要递归删除目录,这里有纯C的例子:How to remove directory recursively?基于 FindFirstFile、FindNextFile、DeleteFile 和 RemoveDirectory .

还有SHFileOperation但它更重量级并且基于 Windows Shell 函数,并不总是需要 Shell DLL,尤其是在您编写服务器代码时。

关于在 Windows 中从纯 C 创建一个唯一的临时目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287475/

相关文章:

c++ -::createFile winApi 失败并出现错误 5 (access_denied)。是 shell 编程还是其他解决方案或任何提示。

c++ - WS_EX_LAYERED 窗口不接收鼠标事件

c - 理解二维数组

windows - 没有密码的用户只有在管理员组中才能被模拟

c - 开一个HANDLE有多贵?

Linux/OSX/Windows - 等待进程结束

java - 在 Java 程序中禁用 Windows 行为

java - 索引文档的最大大小/数量是多少 - 32 位操作系统上的 java lucene 3.0.2

c - 在 C 中打印 main()

c - GCC:在 Mac Os 上链接 dylib