关于在具有相似名称的 C 编程中保存文本文件



我想在 c 编程中保存文件,文件名应该是这样的:

  1. 如果 Game1.txt 不存在,它应该是 game1.txt。
  2. 如果游戏 1.txt 存在.txt它应该是游戏 2。
  3. 如果游戏 2.txt 存在,它应该是游戏 3.txt。

等等...那我该怎么做呢????

如果你想是可移植的:

  • 使用循环和计数器
  • sprintf()格式字符串"game%d.txt"的文件名
  • fopen()文件以供读取
    • 如果成功:关闭它并继续
    • 如果失败:退出循环并打开文件进行写入

请注意,存在争用条件:如果打开读取失败,则另一个进程可能会在您打开文件进行写入之前创建该文件。

有一个 GNU 扩展用于fopen()模式标志"x",用于排他性打开。使用此方法将消除争用条件。

从这个问题来看,检查 C 中是否存在文件的最佳方法是什么?(跨平台),最好的解决方案似乎使用 unistd.h 标头中的 access() 函数。

#include <string.h>
#include <stdio.h>
#include <unistd.h>
const size_t MAX_FILENAME_LENGTH = 12;
const int MAX_FILENAME_TRIES = 1000;
char *get_next_filename()
{
    char *filename = malloc(MAX_FILENAME_LENGTH);
    FILE *file;
    int found = 0, i = 0;
    do {
        snprintf(filename, "game%d.txt");
        if (access(filename, F_OK) < 0) { //if file does not exist, we've found our name!
            found = 1;
        } else {
            ++i;
        }
    } while (! found && i < MAX_FILENAMES_TRIES);
    return filename;
}

此处的代码以 C 字符串的形式返回下一个可用文件名,从 game0.txt 到 gameN.txt,其中 N 是 MAX_FILENAME_TRIES 的值。使用文件名后,不要忘记free()文件名。

最新更新