试图不在C中覆盖文件?

时间:2013-05-07 20:09:01

标签: c file fopen

您好我试图不使用fopen(文件,“w”)覆盖C中的文件;

我的问题是该文件已作为10 MB文件存在,但当我使用fopen时,文件最终变为1KB。我想写一些文件,但我希望它保持相同的大小。我怎么做到这一点?我看到“a +”将事物附加到文件的末尾但是如果我想在不扩展大小的情况下将某些内容写入文件的开头呢?它只是一个空文件

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

4 个答案:

答案 0 :(得分: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 - &gt;打开文件进行阅读。 (文件保持不变)
w - &gt;打开文件进行写入。 (文件被删除)
a - &gt;打开要附加的文件。 (文件保持不变,文件指针移动到结束)

除了这三种主要类型之外,您还可以添加更多选项:
b - &gt;将文件作为二进制文件打开,忽略格式化字符,如\ n
t - &gt;以文本形式打开文件,特别是在Windows下将\ n解析为\ r \ n。

答案 1 :(得分:1)

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

修改:打开时使用r+模式。来自man fopen

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

答案 2 :(得分: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;
}

答案 3 :(得分:-1)

惠!我参与了一个在我的网页上添加文字或“博客”帖子的项目,我找到了一个非常酷的方法。 为此,我将使用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 FILE:

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. 然后我得到了所有结束标签。
  4. C解释:

    1. 我想知道在这种情况下我想要从文件的结尾寻找多少字节(写入空行)。
    2. 我用scanf()
    3. 得到了这个号码
    4. 然后我在减去x字节的文件中搜索,因为通常它会添加字节,我们指定从哪里。
    5. 然后为了这个目的,我在这里添加了一个break标记以及2个换行符来继续循环。
    6. 然后我写了我想要的文字。
    7. 最后,我添加了我的最后两个标签,因为当我写下我的文本时,它会覆盖所有文本。所以之后,光标位于最后一个换行符之后,我可以写出结束标记。
    8. 所以......这就是你能做到的。