【问题标题】:File program - fseek isnt working文件程序 - fseek 不工作
【发布时间】:2013-06-25 18:40:18
【问题描述】:

我无法让这个 fseek() 函数在我的代码中工作。我写的文字只是没有从我指出的地方开始,我不知道为什么。它应该从 \n 开始写入,它只是覆盖所有文本文件。即使我用a 打开它,它也不会去我通过参数命令的地方。

   fclose(file);
    FILE *file_a = fopen("ex6.txt", "w");

    fseek(file_a, -1, SEEK_END);

    puts("Write text to add:");
    while((letter = getchar()) != '\n')
    {
        fputc(letter, file_a);
    };

发生了什么?为什么这不起作用?

【问题讨论】:

  • 如果你想要文件的结尾,我希望你想将0 传递给 fseek。 -1 将在结束前 1 个字节。
  • 您是否尝试在文件末尾附近插入而不是仅追加到末尾?
  • 抱歉信息丢失。我正在尝试添加文本,让我们在结尾之前说 2 个字符,所以想象这是我的文件内容:“hello\0”我想插入信息“hell | o\0”,覆盖“o\0”和把我自己的测试放在那里,比如“是的”,最终的结果是:“是的,是的”。但这就像 fseek 不符合我的要求,即使我将引用放在正数中......
  • 你的平台是什么?也许这可能是相关的? -> “允许库实现没有意义地支持 SEEK_END(因此,使用它的代码没有真正的标准可移植性)。” cplusplus.com/reference/cstdio/fseek
  • 其实我是在“w+”模式下打开的,现在一切都好了。似乎它不支持简单的“w”或“a”。谢谢你们的回答,伙计们。这很有帮助。

标签: c file fseek


【解决方案1】:

仅当文件以二进制模式打开时,导航到绝对值才有效。当它以文本模式打开时,fseek() 无法导航到文件中除 0(文件开头)之外的绝对位置,尝试这样做会导致未定义的行为。但是,您可以导航到ftell() 返回的文件中的引用。其原因是某些操作系统对某些字符的处理;一些实现允许它,但 POSIX 不强制它。

我知道你解决了 cmets 中的问题,这只是为了结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多