据我所知,创建隐藏文件夹的方法是:
CreateDirectory(folderName); SetFileAttributes(folderName,FILE_ATTRIBUTE_HIDDEN);
执行此操作会导致目录暂时存在,因为未隐藏。云软件和备份等其他程序可能会错误地将其视为非隐藏...并对其执行某些操作。
是否可以在单个API调用中实现相同的功能?一个原子步骤?好像应该是可能的! ??
答案 0 :(得分:1)
也许这些步骤可以帮到你:
答案 1 :(得分:1)
您可以使用CreateDirectoryEx
。
使用指定模板目录的属性创建新目录。如果基础文件系统支持文件和目录的安全性,则该函数将指定的安全描述符应用于新目录。新目录保留指定模板目录的其他属性。
您需要一个方便的模板目录和合适的(即隐藏的)属性。
答案 2 :(得分:1)
将目录创建为临时目录。 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
) ;
根据它的调用方式,这将是
然后在temp目录中创建该名称的目录。如果你已经进入了你需要WRT属性(隐藏等)的状态,那么使用MoveFile()
或MoveFileEx()
将其移动到最终位置。
当然,如上所述获取临时路径可能更容易,并且迭代尝试创建子目录,使用GUID或当前日期/时间生成唯一临时名称并附加递增后缀。创建目录后,设置其属性并按上述步骤将其移动到最终位置。
答案 3 :(得分:0)
在使用CreateDirectoryTransacted()
创建并使用SetFileAttributesTransacted()
提交的单个交易中使用CreateTransaction()
和CommitTransaction()
,例如:
HANDLE hTrans = CreateTransaction(...);
CreateDirectoryTransacted(..., hTrans);
SetFileAttributesTransacted(..., hTrans);
CommitTransaction(hTrans);
CloseHandle(hTrans);