【问题标题】:fopen fails in C if slash '/' is put before directory's name如果在目录名称之前放置斜杠“/”,则 fopen 在 C 中失败
【发布时间】:2017-10-13 10:01:43
【问题描述】:

如果我以以下任何一种方式在 C 中打开文件,则 fopen 可以正常工作。

fopen("file.txt", "w");
fopen("/file.txt", "w");
fopen("dir/file.txt", "w");

如果我在目录名称前添加一个斜杠“/”(在 Windows 的情况下为“\”),则 fopen 失败(返回 NULL)。

fopen("/dir/file.txt", "w");

它发生在 Windows (MSVC) 和 Linux 上。它的原因是什么?我应该删除斜杠“/”吗?

【问题讨论】:

  • 你了解路径的概念吗?尤其是绝对路径和相对路径的区别?
  • 在 shell 中使用“ls”或“dir”测试你尝试使用的路径,你很快就会发现你的错误在哪里
  • file.txt == file.txt int 当前目录。 /file.txt == 系统根目录中的 file.txt。它们显然不一样。
  • @Someprogrammerdude awww .... 在发布问题并在 Linux 上的简单 C 文件中尝试后,我意识到了这一点。我最初只是从 Windows 的角度考虑它。为什么它在 Windows 上失败了?
  • 我猜你的路径字符串中的 \ 字符被 C 编译器解释为转义。要获得文字 \ ,您可能需要 \\

标签: c linux windows fopen


【解决方案1】:

您需要添加“。” “/”前面

例如:fopen("./dir/file.txt", "w");

如果您以“/”开头,它将从根目录开始。这就是 fopens 返回 null 的原因

【讨论】:

  • 不要这样做。当前文件夹可以是任何东西,假设它指向应用程序的目录是一个常见的错误。
  • 有任何理由使用./dir 而不仅仅是dir 吗?
  • @AndrejsCainikovs 我刚刚回答了用户如何从当前文件夹转到该文件(在子文件夹中)。
  • @Ran94 谢谢!在阅读了上面的 cmets 之后,我也来到了这个修复(并且在问题上获得了 -1 票,这似乎很不公平。不是吗?)。知道这个根路径在 Windows 上导致错误的原因是什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2022-07-05
  • 1970-01-01
  • 2016-06-16
相关资源
最近更新 更多