检查文件是否具有可执行权限windows c ++

时间:2017-04-13 14:18:43

标签: c++ windows

我有一个文件名,我想通过c ++检查它是否可以在windows上执行。我找到了_access和_access_s,但它们只检查读/写。

我的问题是,当我下载一个bat文件时,windows会阻止它作为安全措施。当我运行我的程序并尝试执行它时,Windows会阻止我的程序并询问用户是否还要继续,因为该文件存在风险。我想通过在执行文件权限之前检查文件权限来避免这种情况。

1 个答案:

答案 0 :(得分:2)

如果您使用的是基于Unix的操作系统,则Windows文件系统NTFS不会像您期望的那样支持可执行属性。

您在这里看到的是shell对添加到文件中的额外流做出反应。流是NTFS的一个特性。

Microsoft提供了一些示例代码,说明如何访问文件中的流:

对于从互联网下载的文件,微软浏览器(IE和Edge)添加一个名为" Zone.Identifier"的流,ShellExecute和相关API在被要求执行时检查用于向用户显示安全提示的文件。

要清理文件以便不显示安全提示,则必须删除该流。

BOOL didDeleteZoneIdentifier = DeleteFile(TEXT("Path To Batch File.bat:Zone.Idenfier"));
if(!didDeleteZoneIdentifier){
    int errorCode = GetLastError();
    ....