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

时间:2017-01-24 18:41:51

标签: c file

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

  1. 如果game1.txt不存在,它应该是game1.txt。
  2. 如果存在game1.txt,则应为game2.txt。
  3. 如果存在game2.txt,则应为game3.txt。
  4. 依旧...... 那怎么办呢????

2 个答案:

答案 0 :(得分:1)

如果你想要便携:

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

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

fopen()模式标志“x”有一个GNU扩展名,用于独占开放。使用它可以消除竞争条件。

答案 1 :(得分:0)

通过此问题What's the best way to check if a file exists in C? (cross platform),最佳解决方案似乎使用了access()标题中的unistd.h函数。

#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()