【问题标题】:odd append behaviour奇怪的附加行为
【发布时间】:2011-05-06 15:36:46
【问题描述】:

如果我有一个文件包含

手册
/lib/plymouth/themes/default.plymouth

/lib/plymouth/themes/spinfinity/spinfinity.plymouth
10
/lib/plymouth/themes/ubuntu-logo/ubuntu-logo.plymouth
100

然后我以a模式打开它,然后做

fprintf(f, "/el/derpito.plymouth\n100\n");

为什么文件现在包含这个?

手册
/lib/plymouth/themes/default.plymouth

/lib/plymouth/themes/spinfinity/spinfinity.plymouth
10
/lib/plymouth/themes/ubuntu-logo/ubuntu-logo.plymouth
100

/el/derpito.plymouth
100

我希望文件是这样的:

手册
/lib/plymouth/themes/default.plymouth

/lib/plymouth/themes/spinfinity/spinfinity.plymouth
10
/lib/plymouth/themes/ubuntu-logo/ubuntu-logo.plymouth
100
/el/derpito.plymouth
100

【问题讨论】:

  • 试试 Notepad++ 或其他可以显示空白的好编辑器。原文件末尾似乎多了一个\n。
  • 奇怪的是,没有。我已经解决了在r 中打开文件,在w 中打开另一个文件,然后手动复制行直到我需要添加更多行。然后我删除第一个文件并将新文件重命名为旧文件的名称。这显然不优雅,但它是迄今为止我得到的最佳解决方案。

标签: c file append


【解决方案1】:

在您进行写入之前,可能有一个孤独的 \n 或 \cr 卡在文件末尾。我会用十六进制编辑器打开它并查看。

【讨论】:

  • 该文件应以换行符结尾。如果我以附加模式打开,然后写一些东西(不以换行符开头),我希望它直接附加在文件提供的换行符之后,而不是另一个换行符。
  • @Delan 您是否在写入前后使用十六进制或其他编辑器检查了文件,以显示实际正在发生什么,而不是您认为应该发生什么i> 正在发生吗?
  • 是的。文件以100\n 结尾,我打算追加/el/derpito.plymouth\n100\n,但真正追加的是\n/el/derpito.plymouth\n100。就像我附加的结束换行符移动到新数据的开头一样。
  • @Delan 我下班后有一些时间来看看这个,除了你没有仔细检查它之外我不知道要告诉你什么,而且你实际上有一个额外的换行符.当我在十六进制编辑器中打开它时,如果最后有两个尾随 0x0A('\n'),那么我就会得到你正在谈论的行为。当我确保只有一个 0x0A 时,我会得到您的“所需”输出。显然,您没有使用十六进制编辑器打开文件。如果没有,请尝试使用 vi。 linuxinstead.com/blog/2009/04/21/using-vi-as-a-hex-editor。我很想知道结果。
【解决方案2】:

我的第一个猜测是文件的最后一个字符(在追加之前)是换行符,之后追加新行。

【讨论】:

  • 正如我在之前对 San Jacinto 的回答中提到的那样,该文件最初在 100 之后的 一个 换行符结束,但我的附加操作就像有两个一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2014-02-06
  • 2015-01-08
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多