检查文件是否匹配字符串

时间:2017-11-13 03:24:31

标签: c file

我正在编写一个允许多个用户创建,保存和加载数据到文件的程序。我遇到了一个我无法找到的问题似乎找出了一个不允许用户创建重复文件名的逻辑。

到目前为止,这是我的代码的重要工作部分,但我的问题在哪里。变量user在我的程序启动时分配,用户必须输入其用户名和密码。

else if (selection == 6)
{
    int i;
    int d;
    printf("Please enter a file name: ");
    scanf("%s", filename);
    newFile = fopen(filename, "a+");
    Record = fopen("records.txt", "a+");            
    fprintf(Record, "%s %s\n", user, filename);
    for (i = 0; i < icount; i++)
    {

        fprintf(newFile, "%d ", ints[i]);
    }
    for (d = 0; d < dcount; d++)
    {

        fprintf(newFile, "%lf ", doubles[d]);
    }
    fclose(Record);
    fclose(newFile);


}
else if (selection == 7)
{
    printf("Please enter a file name: ");
    scanf("%s", filename);
    Record = fopen("records.txt", "a+");
    while (fscanf(Record, "%s %s", curuser, curfile) != EOF)
    {
        if (strcmp(user, curuser) == 0 && strcmp(filename, curfile) == 0)
        {
            int c;
            //fopen(newFile, "a+");
            newFile = fopen(filename, "a+");
            if (newFile) {
                while ((c = getc(newFile)) != EOF)
                {
                    putchar(c);

                }
                fclose(newFile);
                break;
            }


        }
        else
        {
            printf("You don't have access to this file.\n");
            break;
        }
    }
}

在选择6的某个地方,我试图在代码中说,&#34;好的用户,输入一个文件,除非该名称已经存在。&#34;我试过的是

while (fscanf(Record, "%s %s", curuser, curfile) != EOF)
{
    if  (strcmp(curfile, filename) == 0)
    {
        break;
    }
    else
    {
        fprintf(Record, "%s %s\n", user, filename);
        fclose(Record);
    }
}

我无法弄清楚为什么这不会起作用。我尝试将此代码放在Record文件声明下面。

我认为问题可能是当记录文件为空时,!= EOF行会导致它中断,但我也无法找到最初获取一个用户和文件名的方法在探测其余用户的文件名之前的记录。任何正确方向的指导都将受到赞赏!

1 个答案:

答案 0 :(得分:0)

我认为你可以通过在几个部分中切割while循环来解决你的问题:

  1. 执行fscanf
  2. 检查文件结尾
  3. 检查“找到用户”
  4. 最后,

    1. 如果以前没有在文件中写入用户。
    2. 我会写一些类似的东西:

      int record_found = 0;
      int scanf_res;
      
      while (1)
      {
          /* do the fscanf */
          scanf_res = fscanf(Record, "%s %s", curuser, curfile);
      
          /* test for end of file */
          if (EOF == scanf_res)
          {
              /* end of file reached */
              break;
          }
      
          /* if fscanf has mado 2 conversion AND
             filename is curfile */
          if ((2 == scanf_res) && (strcmp(curfile, filename) == 0))
          {
              record_found = 1;
              break;
          }
      }
      
      if (!record_found)  
      {
          /* add user if needed */
          fprintf(Record, "%s %s\n", user, filename);
      }
      
      /* and close file in all cases */
      fclose(Record);
      
相关问题