2

嗨,我试图不使用 fopen(file, "w"); 覆盖 C 中的文件;

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

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

4

4 回答 4

6

对的,这是可能的。通过与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。

于 2013-05-07T20:11:33.173 回答
2

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

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

r+     Open for reading and writing.  The stream is positioned at
       the beginning of the file.
于 2013-05-07T20:12:36.797 回答
1

*一种在 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;
}
于 2013-05-07T20:28:53.117 回答
-1

嘿!我参与了一个在我的网页上添加文本或“博客”帖子的项目,我发现了一种非常酷的方法。为此,我将使用一个 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. 最后,我添加了我的最后两个标签,因为当我写我的文本时,它会覆盖它之后的所有标签。所以之后,光标位于最后一个换行符之后,我可以写结束标签。

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

于 2017-07-05T05:48:26.310 回答