【问题标题】:Get a char on the last line of a file in C [closed]在C中文件的最后一行获取一个字符[关闭]
【发布时间】:2016-07-09 17:28:11
【问题描述】:

好吧,我编写了一个程序来执行一些步骤,当它在文件上打印最终值时,使用 fprinf(file, "No %d | Scr %d | Secs %d\n", number, score, seconds),但是当我再次运行程序时,它会清除所有打印的内容并在文件上进行相同的打印,因为我使用的是相同的起点。
例如。:

.
.
No 97 | Scr 712 | Secs 124
No 98 | Scr 5040 | Secs 342
No 99 | Scr 3621 | Secs 402
No 100 | Scr 7803 | Secs 225

那么我怎样才能得到 last number 并设置 if 为 beginning point 并且不按我想要的那样在它的值之前打印?

【问题讨论】:

    标签: c file file-io


    【解决方案1】:

    正如 Cherubim Anand 指出的 in his answer,您可以通过以附加模式打开文件来恢复写入文件,但也有一些函数用于混淆文件中的读写指示器,它们是 ftell() 和 @ 987654323@.

    ftell() 返回您现在在文件中相对于文件起点 (0) 的绝对位置,fseek() 可用于修改此位置。

    fseek() 在 3 种不同的模式下工作,具有绝对地址 (SEEK_SET)、相对于当前位置的偏移量 (SEEK_CUR) 或相对于文件结尾的偏移量 (SEEK_END)。

    例如,您可以使用fseek(fd, 0, SEEK_END) 将指示器修改到文件末尾(与以追加模式打开相同)。

    一旦指示器位于文件末尾,您就可以使用ftell() 了解文件的大小。很有用。

    如果您想回到文件的开头,您可以使用fseek(fd, 0, SEEK_SET)。还有rewind()这个函数基本上做同样的事情。

    如果您正在处理包含结构的二进制文件,您可以使用fseek() 转到文件中的特定地址以获取您需要的信息。

    【讨论】:

      【解决方案2】:

      但是当我再次运行程序时,它会清除所有打印的内容并在文件上进行相同的打印,

      当您以 write 模式打开文件时会发生这种情况

       fopen("file","w"); //write mode
      
      • write模式下打开任何文件时,如果文件不为空,则将其设为空,并将文件指针设置为开头

      那么如何获取最后一个数字并将其设置为起点并根据需要打印它之前的值?

      你不需要得到最后一个数字,而是以追加模式打开它

       fopen("file","a"); //append mode
      
      • 如果以append模式打开,文件指针会自动设置到文件最后一个位置,可以追加数据。

      我需要在添加之前查看最后一个数字是什么

      提示:

      • read模式打开文件,使用fseek()getw()函数获取最后一个数字。

      • 现在以append 模式打开文件并继续向其中添加数据。

      注意:read模式下打开文件时,确保文件存在,否则fopen()返回NULL,尝试这样检查:

      if ((fp = fopen(file, "r")) == NULL) //try opening this way
      

      如需进一步了解文件,请参阅此处:click

      【讨论】:

      • 哦,现在我明白了……但即使我处于附加模式,我怎么能只得到最后一个数字而不是最后一行?
      • @ViníciusGuardianoSouza 有多种方法可以做到这一点。了解 fseek() 函数和 fscanf()(getting了解文件功能真的很有帮助)
      • 但问题仍然存在于附加模式,假设我运行了我的代码,结果是一个非常大的文件,例如。 300.000 行数据,所以如果我在第 300.001 行再次执行此操作,它将以相同的第 1 行打印,这就是为什么我需要查看最后一个数字是什么。
      • 首先以读取模式打开您的函数并使用文件函数获取最后一个数字...然后以附加模式打开文件:)
      • tutorialspoint.com/cprogramming/c_file_io.htm 是开始学习文件的好地方
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2020-12-08
      • 2018-11-19
      • 2021-04-30
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多