将文件夹属性更改为在 iOS 上隐藏(FMX、C++)

Change folder attribute to hidden on iOS (FMX, C++)

我想在运行时创建一个目录并将其隐藏。使用 this example 我尝试了以下代码,它在 Win32 上运行良好,但在 iOS 构建时出错:

UnicodeString TestPath;
TestPath = System::Ioutils::TPath::GetDocumentsPath() + "\test\";
TDirectory::CreateDirectory(TestPath);
TFileAttributes dirattribs;
dirattribs = TDirectory::GetAttributes(TestPath);
dirattribs = dirattribs << TFileAttribute::faHidden;
TDirectory::SetAttributes(TestPath, dirattribs);

我在为 iOS 或 Android 构建时遇到的构建错误是 no member named 'faHidden' in 'System::Ioutils::TFileAttribute'。那么,如何更改 iOS 和 Android 上的文件夹属性?

p.s。使用 Rad Studio 10.3.2(C++ 生成器)。

faHidden 未在 Posix 系统上实现。这是 Embarcadero 的 DocWiki 中的 documented behaviorfaHidden 仅适用于 Windows。

要在 Posix 系统上创建对用户隐藏的文件夹,您只需在文件夹名称前加上一个前导点:

UnicodeString TestPath = System::Ioutils::TPath::GetDocumentsPath();
#ifdef _Windows
TestPath = System::Ioutils::TPath::Combine(TestPath, _D("test"));
TDirectory::CreateDirectory(TestPath);
TFileAttributes dirattribs = TDirectory::GetAttributes(TestPath);
dirattribs = dirattribs << TFileAttribute::faHidden;
TDirectory::SetAttributes(TestPath, dirattribs);
#else
TestPath = System::Ioutils::TPath::Combine(TestPath, _D(".test"));
TDirectory::CreateDirectory(TestPath);
#endif

请注意,也可以在 Windows 上创建一个带前导点的文件夹。它只是不会影响文件夹的隐藏属性,您仍然需要明确设置:

UnicodeString TestPath = System::Ioutils::TPath::GetDocumentsPath();
TestPath = System::Ioutils::TPath::Combine(TestPath, _D(".test"));
TDirectory::CreateDirectory(TestPath);
#ifdef _Windows
TFileAttributes dirattribs = TDirectory::GetAttributes(TestPath);
dirattribs = dirattribs << TFileAttribute::faHidden;
TDirectory::SetAttributes(TestPath, dirattribs);
#endif