赢 – 你可以创build一个隐藏的文件夹在一个步骤?

据我所知,创build隐藏文件夹的方法是:

CreateDirectory(folderName); SetFileAttributes(folderName,FILE_ATTRIBUTE_HIDDEN);

这样做会导致目录存在,暂时不隐藏。 其他程序,如云软件和备份,可能会误将其视为非隐藏…并采取行动。

在单个API调用中可以实现相同的function吗? 一个primefaces步骤? 似乎应该是可能的! ??

您可以使用CreateDirectoryEx

使用指定模板目录的属性创建一个新目录。 如果底层文件系统支持文件和目录的安全性,则该函数将指定的安全描述符应用于新目录。 新目录保留指定模板目录的其他属性。

您需要一个适合(即隐藏)属性的模板目录。

也许这些步骤可以帮助你:

  1. 在备份/云区域之外创建目录,
  2. 使其隐藏,
  3. 然后将其移动到所需的位置。

将该目录创建为临时目录。 GetTempPath()会给你临时目录的路径:

 DWORD WINAPI GetTempPath( _In_ DWORD nBufferLength, _Out_ LPTSTR lpBuffer ) ; 

使用它用GetTempFileName()创建一个唯一的临时文件名:

 UINT WINAPI GetTempFileName( _In_ LPCTSTR lpPathName, _In_ LPCTSTR lpPrefixString, _In_ UINT uUnique, _Out_ LPTSTR lpTempFileName ) ; 

这将取决于它如何被调用

  • 创建一个具有唯一名称的空文件(uUnique为零),或者
  • 只是返回唯一的名称(uUnique不为零)。

然后在临时目录中创建该名称的目录。 当你已经达到你想要的状态WRT属性(隐藏等),然后将其移动到MoveFile()MoveFileEx()最终位置。

当然,如上面那样获取临时路径可能会更简单,并且反复尝试创建一个子目录,使用GUID或当前日期/时间生成唯一的临时名称,并附加递增后缀。 一旦目录被创建,然后设置其属性并按照上面的步骤将其移动到最终位置。

在使用CreateTransaction()创建并使用CommitTransaction()提交的单个事务中使用CreateDirectoryTransacted()SetFileAttributesTransacted() CommitTransaction() ,例如:

 HANDLE hTrans = CreateTransaction(...); CreateDirectoryTransacted(..., hTrans); SetFileAttributesTransacted(..., hTrans); CommitTransaction(hTrans); CloseHandle(hTrans);