c++隐藏文件创建方法 c++如何创建windows隐藏文件

夜明吖_3154

夜明吖_3154

2026-03-27

597人浏览

原创

在windows下创建隐藏文件必须在createfile的dwflagsandattributes参数中显式指定file_attribute_hidden,并配合create_always或create_new使用;std::filesystem不支持创建时设隐藏属性,需调用winapi setfileattributes;隐藏仅为shell显示标记,不影响访问权限与底层api行为。

c++隐藏文件创建方法 c++如何创建windows隐藏文件

Windows 下用 CreateFile 创建隐藏文件要设对 dwFlagsAndAttributes

直接调用 CreateFile 不会自动隐藏文件,必须显式传入 FILE_ATTRIBUTE_HIDDEN 标志。这个标志得和 CREATE_ALWAYSCREATE_NEW 一起用,不能只靠后续调用 SetFileAttributes —— 那样多一次系统调用,且在并发场景下有竞态风险(文件刚创建、还没来得及设属性就被其他进程看到)。

常见错误是把 FILE_ATTRIBUTE_HIDDEN 错当成打开模式传给 dwDesiredAccess,或者漏掉 FILE_ATTRIBUTE_NORMAL 的屏蔽逻辑(比如误写成 FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NORMAL,后者会覆盖前者)。

  • dwFlagsAndAttributes 参数必须包含 FILE_ATTRIBUTE_HIDDEN,其他属性如 FILE_ATTRIBUTE_ARCHIVE 可按需叠加
  • 不要在 CreateFile 后立刻用 SetFileAttributes 补设——除非你明确需要延迟隐藏或处理已存在文件
  • 如果文件已存在,CreateFile 默认不会修改其属性;此时需先用 GetFileAttributes 读取原属性,再用 SetFileAttributes 合并 FILE_ATTRIBUTE_HIDDEN

std::filesystem::create_directories 不能设隐藏,得手动补 std::filesystem::permissions

C++17 的 std::filesystem 没提供创建时设隐藏属性的接口。它建目录或文件后,属性始终是默认值(FILE_ATTRIBUTE_NORMAL)。想隐藏,必须额外调用 std::filesystem::permissions 并传入 std::filesystem::perms::owner_read | std::filesystem::perms::owner_write 等等?不对——Windows 上这函数映射的是 ACL 权限,不是文件属性。

真正有效的是用 std::filesystem::status 获取 file_status,再转成 Windows 原生句柄,最后调用 SetFileAttributes。但更简单直接的做法是:绕过 std::filesystem 的“跨平台抽象”,在 Windows 上就用 WinAPI。

C++ 算法竞赛自动化测试数据生成与校验框架
C++ 算法竞赛自动化测试数据生成与校验框架

根据原题生成新题面、验证器及完整测试数据,自动套用 testlib 模板,用于用户要求生成测试数据时。

下载
  • 别指望 std::filesystem::create_directories("foo") 能产生隐藏目录——它不会
  • std::filesystem::permissions 在 Windows 上改的是 NTFS 权限位,不影响“隐藏”这个 Explorer 层面的属性
  • 若坚持用 std::filesystem 创建,后续必须调用 SetFileAttributes(L"foo", FILE_ATTRIBUTE_HIDDEN),且注意路径要用宽字符(L"..."

隐藏文件在命令行和资源管理器里表现不一致,容易误判是否生效

资源管理器默认不显示隐藏文件,但 cmdpowershell 默认能列出(dir /a:h 是专门查隐藏项,但 dir 本身也包含隐藏文件,除非加 /a:-h)。这意味着:你以为文件“藏好了”,其实随便一个 dir 就能看见。

更麻烦的是,某些 IDE(如 VS Code)或构建工具(如 CMake)默认忽略隐藏文件,但另一些(如 Ninja)可能不忽略——行为取决于它们内部用的文件遍历逻辑是否检查 FILE_ATTRIBUTE_HIDDEN

  • 验证是否真隐藏:在资源管理器中打开“查看 → 隐藏的项目”,看文件是否灰显;同时在 CMD 执行 attrib filename,确认输出含 H 标记
  • 不要依赖“看不见”就认为安全——隐藏 ≠ 权限控制,敏感内容该加密还得加密
  • Git 默认忽略隐藏文件(.gitignore 里没特别写的话),但 git add -f 仍可强制加入

SetFileAttributes 改已有文件隐藏属性时,注意返回值和错误码

很多人调完 SetFileAttributes(L"config.ini", FILE_ATTRIBUTE_HIDDEN) 就以为完事了,结果发现没生效。最常见原因是路径不存在、权限不足,或传了非法组合(比如同时设 FILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_SYSTEM,虽不报错但部分旧工具会拒绝处理)。

必须检查返回值:FALSE 表示失败,接着调 GetLastError() 看具体原因。常见错误码有 ERROR_FILE_NOT_FOUND(路径错)、ERROR_ACCESS_DENIED(比如文件正被其他进程以独占方式打开)。

  • 路径必须是绝对路径或当前工作目录下的相对路径;相对路径在多线程环境下容易出错,建议统一用绝对路径
  • 如果目标是目录,FILE_ATTRIBUTE_HIDDEN 只影响该目录本身,不递归作用于子项
  • 调用前确保文件/目录未被其他程序以 FILE_SHARE_NONE 方式打开,否则 SetFileAttributes 会失败
事情说清了就结束。真正的难点不在怎么设隐藏,而在于理解“隐藏”只是 shell 层的一个显示标记,它不改变访问权限、不触发安全策略、也不影响大多数底层 API 的行为——这点很容易被忽略。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3028

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4229

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3649

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

366

15

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

3458

6

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

2025.12.24

1009

20

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.21

303

30

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

2026.01.21

479

24

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

2026.02.06

329

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习