【问题标题】:C - given a case-insensitive file path, how to check whether the file exists or not?C - 给定不区分大小写的文件路径,如何检查文件是否存在?
【发布时间】:2017-04-18 19:11:53
【问题描述】:

例如,假设我们有一个名为“Hello.txt”的文件,那么检查“hello.txt”或“heLLo.txt”是否存在应该都返回true。

【问题讨论】:

  • 列出所有可能的不同大小写的字符串版本。在第一次匹配时返回 true,否则返回 false。它可能不会很有趣,我会在谷歌上寻找例子或使用图书馆。
  • 读取文件夹/目录中的所有文件并进行不区分大小写的比较。
  • 这在原则上可能可行,@r3wt,但随着输入长度的增加,它很快变得不可行。
  • 如果期望进行的不仅仅是存在性检查,这真的变得不可行。如果匹配多个A文件,你如何操作?

标签: c file io case-insensitive


【解决方案1】:

如果您运行的是 Windows 或任何不区分大小写的文件系统,那么您只需检查一个大小写即可。如果"Hello.txt" 存在,则"hEllo.txt" 存在(并且是同一个文件)(这里的难题是当您要确保文件在文件系统中使用给定大小写拼写时)

如果您正在运行区分大小写的文件系统,只需获取当前文件的目录名,列出文件内容,然后将条目与当前文件名进行比较,忽略大小写。

【讨论】:

  • 是的,这是正确的方法。但是,如果允许输入包含目录段,并且也必须不区分大小写进行比较,则可能会比这更复杂。
  • @JohnBollinger。是的,在这种情况下,您必须从根目录开始并找到与当前路径的大小写匹配的目录。但是,如果每个目录有超过 1 个匹配项,这可能意味着递归。
【解决方案2】:

看看fcaseopen,它演示了如何处理不区分大小写的文件操作。

基本上,要使用的 C 头文件/函数是:

  • 从dirent.h,使用opendir/readdir/closedir 浏览目录中的文件
  • 来自string.h,使用strcasecmp比较两个文件名,忽略字符的大小写

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2010-12-29
    • 2012-06-18
    • 2011-12-13
    相关资源
    最近更新 更多