代码之家  ›  专栏  ›  技术社区  ›  char m

为什么c函数stat在拒绝访问文件夹时没有正确设置errno

  •  1
  • char m  · 技术社区  · 14 年前

    我正在用VS2005开发一个C程序,我发现当文件夹访问受到限制,我无法创建文件夹或从文件夹中删除任何内容时,文件夹的stat函数不能正确设置errno。errno设置为值enent。我绝对不能修改权限,这样我就可以获得每个值。ou stat返回0(无错误)或errno设置为enent。你能告诉我如何区分文件夹真正存在和用户没有足够的文件夹权限吗?还有一件事我不相信,那就是特定的权限结果返回-1。当我查看文件夹的有效权限时,我用它测试了“deny”列中的“stat”。即使选中了“创建文件夹/附加数据”,但我无法在其中创建文件夹。

    谢谢&br-Matti

    2 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    Windows安全属性的粒度太细,无法用_stat()进行测试。它的实现使用findfirstfile()API函数,只有在没有授予枚举文件的权限时,该函数才会失败。这种情况很少发生,通常关闭的更严格的情况是写或修改。

    通常避免黑客攻击安全API来测试ACL,而且这种攻击非常不可移植。当你试图打开文件时,你会发现你没有必要的特权。这是可以接受的,因为您在代码中没有任何功能可以获得访问文件的权限。

        2
  •  1
  •   Javier    14 年前

    我不是百分之百肯定,但你试过了吗 _doserrno ?根据MSDN文档:

    For I/O operations, use _doserrno to access the operating-system error-code 
    equivalents of errno codes. For most non-I/O operations the value of _doserrno is   
    undefined.
    
    推荐文章