如何生成唯一的文件名或路径?

时间:2012-08-16 08:25:18

标签: c++ windows unix

如何生成唯一的文件名或路径?我正在寻找适用于Unix(类似)操作系统和Windows的解决方案。

6 个答案:

答案 0 :(得分:6)

使用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作为文件名(因此路径无关紧要)。

答案 1 :(得分:5)

在两者上使用mktemp。 Windows有一个版本的posix调用msdn docs,linux调用是mktemp(3)。 Linux上的mktemp命令行工具偶然只是调用

答案 2 :(得分:1)

正如其他地方所提到的,有tmpnam。这通常很糟糕 实施,以便与其他过程允许竞争条件。在一个 然而,典型的单用户机器通常就足够了。

在我自己的代码中,我通常会创建一个带有进程ID的目录 作为名称的一部分,并安排将所有临时文件放入其中 (使用简单的计数器来改变文件名);在共享磁盘上,我 还将处理器id分解为目录名称(但我倾向于把它 本地非共享驱动器上的临时文件,避免了大部分文件 问题)。

答案 3 :(得分:0)

  • 最简单的方法:生成一个随机数并使用其十六进制值作为文件名(除非该文件存在,在这种情况下,您创建一个新文件)。

  • 最简单的方法2:如果您只需要一些不存在的文件,请使用数字(或其十六进制值)作为文件名或其中的一部分,您只需将数字增加到没有该名称的文件已存在。

  • 更复杂的方式:生成GUID并将其用作文件名(再次验证它未被使用)。

答案 4 :(得分:0)

使用C库函数tmpfiletmpnam。两者都存在于windows和linux下。

但请注意,使用tmpfile时,关闭程序时会自动删除,因此tmpnam可能更适合您。

答案 5 :(得分:-1)

您可以获取当前时间戳并将其用作文件名。或者只是将最后一个文件名增加1.
例如1.txt,2.txt等。