【问题标题】:Trying not to overwrite a file in C?试图不覆盖 C 中的文件?
【发布时间】:2013-05-07 20:09:00
【问题描述】:

您好,我正在尝试不使用 fopen(file, "w"); 覆盖 C 中的文件;

我的问题是该文件已经作为 10 MB 文件存在,但是当我使用 fopen 时,该文件最终变成了 1KB。我想在文件中写一些东西,但我也希望它保持相同的大小。我将如何做到这一点?我看到“a+”将东西附加到文件的末尾,但是如果我想在文件的开头写一些东西而不扩大大小怎么办?这只是一个空文件

或者,有没有办法在 C 中创建一个具有一定大小(例如 10MB)的文件?

【问题讨论】:

    标签: c file fopen


    【解决方案1】:

    是的,这是可能的。使用r+ 打开它是为了“阅读和写作”(而w 打开它是为了重新写作)。

    关于您的其他问题:使用w 打开一个文件并将 1000 个 1024 字节块写入文件,如下所示:

    FILE *fp = fopen("file", "wb");
    if(fp) {
        int i = 0;
        char Buf[1024];
        for(; i < 1000; ++i)
            fwrite(Buf, 1, 1024, fp);
        fclose(fp);
    }
    

    再次为您提供 fopen 标志:

    r -> 打开文件进行读取。 (文件保持不变)
    w -> 打开文件进行写入。 (文件被删除)
    a -> 打开文件进行追加。 (文件保持不变,文件指针移到末尾)

    除了这三种主要类型之外,您还可以添加一些其他选项:
    b -> 以二进制形式打开文件,忽略 \n 等格式字符
    t -> 打开文件作为文本,具体在Windows下将\n解析为\r\n。

    【讨论】:

    • 这样更好。无论如何,请将问题编辑成更好的格式。也更改问题的标题。我又懒又困。
    【解决方案2】:

    打开文件,然后使用fseek 将您的位置设置为文件的开头。

    编辑:打开时使用r+模式。来自man fopen

    r+     Open for reading and writing.  The stream is positioned at
           the beginning of the file.
    

    【讨论】:

    • 他想保持文件大小不变。
    【解决方案3】:

    *一种在 C 中创建具有一定大小(例如 10MB)的文件的方法?

    像这样:

    #include <stdio.h>
    
    int main(void){
        const char *TenMBfile = "TenMB";
        FILE *fp;
        fp=fopen(TenMBfile, "w");
        fseek(fp, 10*1024*1024-1,SEEK_SET);
        fputc(0, fp);
        fclose(fp);
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      喂!我参与了一个在我的网页上添加文本或“博客”帖子的项目,我发现了一种非常酷的方法。 为此,我将使用一个 HTML 文件和我的程序。 HTML 文件:

      <html>
      <body>
      <p> Hey this is the asssdsadasdsadas paragraph</p><br>
      <p> Hey this is the asssdsadasdsadas paragraph</p><br>
      
      </body>
      </html>

      C 文件:

      printf("Please enter the number of bytes to write from in %s .\n", argv[0]);
          int offset;
          scanf("%d", &offset);
          fseek(fp, -offset, SEEK_END);
          strcat(argv[1], "<br>\n\n");
          fprintf(fp, "%s", argv[1]);
          fprintf(fp, "</body>\n</html>\n");
      

      HTML 解释:

      1. 我从定义的一行开始
      2. 我放了一个空行,我要写在那里。
      3. 然后我得到了所有的结束标签。

      C 解释:

      1. 我问我想从文件末尾寻找多少字节,在这种情况下是 17(写入空行)。
      2. 我用 scanf() 得到号码
      3. 然后我在文件中寻找负 x 字节,因为通常它会添加字节并且我们指定来源。
      4. 然后出于目的,我在这里添加了一个中断标记和 2 个换行符以继续循环。
      5. 然后我写我想要的文本。
      6. 最后,我添加了我的最后两个标签,因为当我写我的文本时,它会覆盖它之后的所有标签。所以之后,光标位于最后一个换行符之后,我可以写结束标签。

      所以...这就是你可以做到的。

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多