如何生成唯一的文件名或路径
How to generate an unique filename or path?
生成唯一的文件名或路径?我正在寻找一种既适用于Unix(类)操作系统也适用于Windows的解决方案。
使用 boost::uuid
:
#include <string>
using std::string;
#include <boost/lexical_cast.hpp>
using boost::lexical_cast;
#include <boost/uuid/uuid.hpp>
using boost::uuids::uuid;
#include <boost/uuid/uuid_generators.hpp>
using boost::uuids::random_generator;
#include <boost/uuid/uuid_io.hpp>
string make_uuid()
{
return lexical_cast<string>((random_generator())());
}
并使用生成的 UUID 作为文件名(因此路径无关紧要)。
在两者上使用 mktemp。Windows 在 msdn docs 上有一个版本的 posix 调用,Linux 调用是 mktemp(3)。Linux上的mktemp命令行工具顺便说一下只是调用
正如其他地方提到的,有tmpnam
. 它通常很糟糕实现,以便允许与其他进程竞争条件。 安娜但是,典型的单用户计算机通常就足够了。
在我自己的代码中,我通常会创建一个目录,其进程 ID作为名称的一部分,并安排将我所有的临时文件放入其中(使用简单的计数器来改变文件名);在共享磁盘上,我会还将处理器 ID 修改为目录名称(但我倾向于将本地非共享云端硬盘上的临时文件,可避免大多数问题)。
-
最简单的方法:生成一个随机数并使用其十六进制值作为文件名(除非该文件存在,在这种情况下,您可以创建一个新文件)。
-
最简单的方法2:如果你只需要一些不存在的文件,使用一个数字(或其十六进制值)作为文件名或它的一部分,你只需增加数字,直到不存在具有该名称的文件。
-
更复杂的方法:生成 GUID 并将其用作文件名(再次验证它未在使用中)。
您可以获取当前时间戳并将其用作文件名。或者只是将最后一个文件名增加 1。
如示例 1.txt、2.txt 等。
使用 C 库函数tmpfile
或tmpnam
。两者都存在于Windows和Linux下。
但请注意,使用 tmpfile 时,当您关闭程序时,它会自动删除,所以也许tmpnam
更适合您。
- 有没有一种简单的方法可以从 c++ 中的路径获取文件名?
- 从 C++ 中的文件路径中提取文件名
- 指定用户定义的文件名的路径
- 从 QFileSystemModel 中的文件路径和文件名获取 QModelIndex
- 如何更改变量文件名的文件路径?
- Xcode 8.3.2 中的错误警告:文件的非可移植路径 - 指定的路径与磁盘上的文件名不同
- #line 指令的 nul.h 文件名的文件路径不正确
- 从文件名中提取文件名,路径来自参数
- 运行正则表达式时未选中的异常 - 从文件路径获取不带扩展名的文件名
- Simple_ls.cpp的C++Boost编译错误-未找到对Boost的引用::文件系统::路径::文件名
- 获取模块文件名不返回路径
- 向文件名参数(LPCSTR)添加预先声明的路径
- 如何生成唯一的文件名或路径
- c++将文件的路径组合为字符串和文件名
- 在vc++中,只从文件的完整路径中查找文件名
- 在 mingw 下编译时出现路径查找文件名错误
- 从流中获取文件名(或路径)
- 如何连接路径和不同的文件名 - C++
- C ++如何从路径字符串中删除文件名
- 使文件名保留在boost中的路径中