【问题标题】:How to fopen a file beginning with file:// in C?如何在C中打开以file://开头的文件?
【发布时间】:2021-08-30 21:48:43
【问题描述】:

我一直在用 C 语言开发一个库,它使用 fopen 打开和读取文件。在某些情况下,传入了以file://开头的文件路径(如file:///Users/<username>/Desktop/doc.txt),即使是机器上的有效文件,fopen也无法打开文件。

除了fopen,我还应该使用其他功能吗?如果没有,我应该如何编辑文件路径才能正确打开?

(要清楚,没有file:// 的相同路径打开正常)

【问题讨论】:

  • 你可能想看看 libcurl。

标签: c macos file filepath


【解决方案1】:
file:///Users/<username>/Desktop/doc.txt

这将产生错误,因为它不是您驱动器中的路径。

file:/// 是提供文件信息并允许网页中的 JavaScript 访问其内容的接口。

如果你想使用这个 file:///Users//Desktop/doc.txt 路径,那么你必须从路径中提取 file://,然后打开特定的文件路径。

【讨论】:

  • 您只需要删除file://(两个斜线,而不是三个)。你从哪里得到 FILE 的首字母缩写词?这听起来更像是一个缩影,而不是一个常见的定义——这当然不是我以前见过的。
  • 它在 IT 中说,File 代表......abbreviations.com/term/2474584
  • @NightNinja 所以发布到互联网上的所有内容都是真的吗?好的....
  • @AndrewHenle 但一切都不是谎言。
【解决方案2】:

您只需要检查路径是否以“file://”开头,如果是,则传入从下一个字符开始的字符串。

const char *prefix = "file://";
if (!strncmp(filename, prefix, strlen(prefix))) {
    fp = fopen(filename + strlen(prefix), "r");
} else {
    fp = fopen(filename, "r");
}

【讨论】:

  • 是否有标准要求为file 协议编码空格?如果是这样,那么不需要对这些编码进行解码吗?
  • @JeffHolt 是的,如果名称中有 URL 编码,则需要对文件名进行解码,然后才能将其传递给 fopen
  • 像这样去掉前缀是不够的!您需要撤消 URL 转义等。
【解决方案3】:

file:///Users/&lt;username&gt;/Desktop/doc.txt 不是文件的路径名。这是一个网址。要打开这种特殊类型的 URL,您需要知道 URL 方案的逻辑以及如何从中提取本地文件系统中的路径名,然后将其传递给 fopen 或类似的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2022-01-04
    • 2016-07-05
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多