是否可以在C ++中创建隐藏的txt文件?

时间:2015-10-16 15:49:23

标签: c++ windows visual-studio

我正在Visual Studio中构建一个应用程序。我需要创建一些要在dll中使用的文件,但我希望在查看文件夹时隐藏这些文件。如何在C ++程序中执行此操作?

交互式地,您可以通过右键单击文件来标记文件已隐藏,选择"属性"并选择" Hidden"。问题是,如何从C ++程序中做出相同的事情?

4 个答案:

答案 0 :(得分:9)

使用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);
} 

答案 1 :(得分:3)

使用FILE_ATTRIBUTE_HIDDEN创建的文件可以很容易地在选中“ Hidden Items”复选框时看到。真正隐藏文件的唯一方法是使用File System Filter Driver,无论何时调用NtQueryDirectoryFile(),它都会从结果中删除文件(或文件模式)记录。 Windows File Explorer会调用NtQueryDirectoryFile(),因此使用这种驱动程序,即使选中了“ Hidden Items”,该文件也不会显示。

enter image description here

答案 2 :(得分:2)

#include <Windows.h>

DWORD attributes = GetFileAttributes("MyFile.txt");
SetFileAttributes("MyFile.txt", attributes + FILE_ATTRIBUTE_HIDDEN)

答案 3 :(得分:0)

尝试这种简单的技术。

#include<iostream>
using namespace std;

int main(){
system("echo >file.txt");
system("attrib +h +s file.txt");

return 0;
}