【问题标题】:how to check if a file is in current directory in C?如何检查文件是否在C的当前目录中?
【发布时间】:2013-03-13 07:22:53
【问题描述】:

如何检查文件(输入)是否在 C 程序的目录中? 首先,我想我可以打开文件,但我不希望用户通过输入../important_dir/important_file 之类的内容来查看我的其他文件,但如果用户执行./dir1/../file1 之类的操作,也许就可以了。这意味着,只要文件在当前目录(没有子目录),就可以打开它。

然后我四处搜索,发现readdir,可以用来查找当前目录中的所有内容,但是如果当前目录有很多文件,每次查找文件名都会太慢用户输入。

有什么快速安全的方法可以做到这一点?

【问题讨论】:

    标签: c file directory


    【解决方案1】:

    我认为 realpath 应该做这项工作。 如果可能的话,我明天会发布解决方案。

    【讨论】:

    • 是的,将realpath() 为文件名问题解析的结果与getcwd() 返回的结果进行比较。
    【解决方案2】:

    您可以只使用stat() 来检查文件的状态。如果有问题的文件不存在,它将返回 -1 并将 errno 设置为 ENOENT

    char filename[] = "myfile";
    
    struct stat s = {0};
    
    if (!(stat(filename, &s)
    {
      if (ENOENT == errno)
        perror("file does not exist.");
    }
    

    【讨论】:

    • 嗨,我试图不允许用户检查我不在当前目录中的文件,而且似乎 stat 会接受一个路径,只要它是有效的,所以它会给用户文件像../dir3/file4,这不是我的预期。
    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 2013-06-26
    • 2015-07-15
    • 2014-02-18
    • 1970-01-01
    • 2022-11-23
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多