是否可以在 C++ 中创建隐藏的 txt 文件?
Posted
技术标签:
【中文标题】是否可以在 C++ 中创建隐藏的 txt 文件?【英文标题】:Is it possible to create a hidden txt file in C++? 【发布时间】:2015-10-16 15:49:22 【问题描述】:我正在 Visual Studio 中构建一个应用程序。我需要创建一些要在 dll 中使用的文件,但我希望在查看文件夹时隐藏这些文件。如何在 C++ 程序中做到这一点?
以交互方式,您可以通过右键单击文件,选择“属性”并选择“隐藏”来标记文件已隐藏。问题是,如何在 C++ 程序中做一些等效的事情?
【问题讨论】:
隐藏是什么意思? 当您在文件中按鼠标右键出现菜单,选择属性并出现文件属性窗口,您可以在“属性”中选择“只读”或'隐藏'(这就是我想要的) 在 C 或 C++ 中没有可移植的方法来创建隐藏文件。 “隐藏文件”是 Windows 特有的功能。您必须使用一些特定于 Windows 的代码来标记文件已隐藏。 C 还是 C++?它们是两种不同的语言。听起来你正在使用 C++,所以坚持下去。 (答案可能恰好与 C 中的相同,但没有必要混淆。) msdn.microsoft.com/en-us/library/windows/desktop/…(真正从事 Windows 编程的人应该随时将其纳入答案) 【参考方案1】:在 Windows API 中使用SetFileAttributes
函数:
#include <windows.h>
#include <fstream>
std::fstream file;
int main()
file.open("myUnhiddenFile.txt",std::ios::out);
file << "This is my unhidden file, that I have created just now" ;
file.close();
wchar_t* fileLPCWSTR = L"myUnhiddenFile.txt"; // To avoid incompatibility
// in GetFileAttributes()
int attr = GetFileAttributes(fileLPCWSTR);
if ((attr & FILE_ATTRIBUTE_HIDDEN) == 0)
SetFileAttributes(fileLPCWSTR, attr | FILE_ATTRIBUTE_HIDDEN);
return(0);
【讨论】:
您忘记了#include
s 和const
。
@LightnessRacesinOrbit 我没有忘记 :-) 我不知道应该包括哪一个 :-) 所以如果你能提供帮助,我将不胜感激 :-)
我假设 <windows.h>
来自 this example's includes
windows.h
不提供std::fstream
。停止猜测并阅读文档!!!!!!
我假设 Alex 知道那个,只是不熟悉 windows api。【参考方案2】:
#include <Windows.h>
DWORD attributes = GetFileAttributes("MyFile.txt");
SetFileAttributes("MyFile.txt", attributes + FILE_ATTRIBUTE_HIDDEN)
【讨论】:
【参考方案3】:选中“Hidden Items”复选框时,可以轻松查看使用 FILE_ATTRIBUTE_HIDDEN 创建的文件。真正隐藏文件的唯一方法是使用File System Filter Driver,它会在调用NtQueryDirectoryFile() 时从结果中消除文件(或文件/s 模式)记录。 Windows 文件资源管理器调用 NtQueryDirectoryFile(),因此使用此类驱动程序,即使选中“隐藏项”,文件也不会显示。
【讨论】:
【参考方案4】:试试这个简单的技巧..
#include<iostream>
using namespace std;
int main()
system("echo >file.txt");
system("attrib +h +s file.txt");
return 0;
【讨论】:
以上是关于是否可以在 C++ 中创建隐藏的 txt 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?