【问题标题】:Multiple File Creation In C++ Using File Handling Specific To A Particular Function Call [closed]使用特定于特定函数调用的文件处理在 C++ 中创建多个文件
【发布时间】:2026-02-20 07:10:01
【问题描述】:

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

我该如何实现它?

我不愿意使用 if-else,因为我需要大量的文件。

我完全空白。请提出任何可能的方法。

【问题讨论】:

标签: c++ file-handling


【解决方案1】:

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


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

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

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

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

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

我不会真的推荐 UUID,因为我们人类很难记住和识别它们。只是将您的目光从调试器或跟踪移到目录显示上,您看到的 UUID 可能已经从您的脑海中消失了。序列号和时间戳更人性化。


关于

我不愿意使用 If-Else,因为我需要大量文件

...这是一个无意义的要求。

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

【讨论】:

  • @cheers-and-hth-alf 谢谢,但首先,我不需要临时文件。我需要一些必须保留的永久文件,直到我想删除它们。其次,如果我需要大量文件,我就不能使用 if-else,所以我不得不设置这个限制,以便过滤我可能得到的答案并避免我实际上不需要的答案。 ://
  • 这几乎不是答案。这应该是一个评论。不是 op 要求的。
  • @IvanRubinson:你的观点是错误的。我在 Stack Overflow 和其他基于网络的编程论坛上对纯关联的非推理强烈意见有丰富的经验,因此每条具体的此类评论和 SO 反对票对我来说不再是莫名其妙的。但这种现象既令人费解又令人担忧,我们的社会显然正在远离理性和话语,以至于即使是对编程感兴趣的人也不再能够对最简单、最琐碎的事情进行推理。众神徒劳无功。你觉得 /we/ 能做什么呢?
  • 如果您想讨论您所说的是有效答案还是应该是评论,您可以在聊天或元中。
  • @ZudeSharp:您认为是什么阻碍了您管理文件的生命周期?
【解决方案2】:

您需要静态变量

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

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

每次调用createFileName,x 都会增加。 第一次调用返回“file_0.txt” 第二次调用返回“file_1.txt” 等等……

【讨论】:

  • 为什么会这样?
  • 能否详细说明。我不知道静态变量如何为我做到这一点。此外,每次调用该函数时,我都想要一个具有不同名称的文件。
  • @Ivan Rubinson 完美我得到了我想要的。非常感谢。 :)
  • @Ivan Rubinson 我的声誉低于 15,所以我的反馈被计算在内但没有公开显示它说:(
最近更新 更多