使用特定于特定函数调用的文件处理在 C++ 中创建多个文件

Multiple File Creation In C++ Using File Handling Specific To A Particular Function Call

我想在 C++ 中定义一个函数,每次调用该函数时使用不同名称的文件处理创建一个文件。

我该如何实施?

我不愿意使用if-else,因为我需要很多很多文件。

我一片空白。请提出任何可行的方法。

您需要静态变量

静态变量可让您在函数调用之间拥有持久数据。

std::string createFileName()
{
    static int x = 0;
    std::string filename = "file_";
    filename += x;
    filename += ".txt";
    x++;
    return filename;
}

每调用一次createFileName,x就会增加。 第一次通话 returns "file_0.txt" 第二次通话 returns "file_1.txt" 等等...

对于临时文件,使用标准库的 tempnam function 或系列(例如 std::tmpfile)。


如果您对 tempnam 不满意,那么您可以使用以下任何一种方法:

  • 根据例如一个计数器。
    计数器可以作为显式参数传递给函数,也可以是 class 数据成员(函数作为函数成员),也可以是函数中的静态局部变量,或命名空间范围多变的。我想我会使用 class 数据成员。

  • 根据高分辨率时间戳创建名称。
    这限制了名称生成的速度,但文件创建是一项耗时的操作,因此速度应该不是一个实际问题。从好的方面来说,每个文件的名称都会说明它的创建时间。

  • 使用 UUID。
    UUID 是一个 通用唯一标识符 ,是 128 位伪随机标识符,极不可能与任何其他生成的 UUID 相同。不幸的是,C++ 标准库不提供 UUID 支持。但是每个常用的通用计算平台都有可用的UUID生成。

如果你想要时间戳但没有速率限制(时间戳的分辨率),那么你可以将它与计数器方法结合起来,即同时使用两者。

我不会真的推荐 UUID,因为它们对我们人类来说很难记住和识别。只要将视线从调试器或跟踪移动到目录显示,您看到的 UUID 可能就会从您的脑海中消失。序列号和时间戳更加人性化。


关于

I Am Not Willing To Use If-Else Since I Need A lots and lots of files

……这简直是无稽之谈

为了更好地回答您的问题,只需陈述问题,不要根据您对某些预想(非)解决方案优劣的评估添加限制性要求。