C++ 如何创建文件路径与磁盘路径相同的虚拟文件系统
我需要在内存或磁盘上创建文件系统类型的东西,它可以像磁盘上的文件一样访问,它的路径可以在fopen()等函数中使用 详情: 我正在使用AddFontResourceEx函数在应用程序中加载字体。因为此函数需要文件路径,所以文件需要显示在磁盘上。但我有一个要求,用户不能访问/查看字体文件 我尝试了AddFontMemResourceEx函数,但加载的字体不可枚举,因此用户无法在应用程序中看到该字体。我还尝试使用一些创建VFS的库,但它们的工作方式类似于数据库,即您可以创建文件/目录并访问它们。但不能在AddFontResourceEx或任何其他函数中使用其文件路径C++ 如何创建文件路径与磁盘路径相同的虚拟文件系统,c++,windows,filesystems,C++,Windows,Filesystems,我需要在内存或磁盘上创建文件系统类型的东西,它可以像磁盘上的文件一样访问,它的路径可以在fopen()等函数中使用 详情: 我正在使用AddFontResourceEx函数在应用程序中加载字体。因为此函数需要文件路径,所以文件需要显示在磁盘上。但我有一个要求,用户不能访问/查看字体文件 我尝试了AddFontMemResourceEx函数,但加载的字体不可枚举,因此用户无法在应用程序中看到该字体。我还尝试使用一些创建VFS的库,但它们的工作方式类似于数据库,即您可以创建文件/目录并访问它们。但不
是否有某种方法可以在内存或磁盘上创建一个虚拟文件系统,该文件系统可以通过我的应用程序访问,我可以在创建的虚拟文件系统上写入/读取文件,并且它的文件路径可以由AddFontResourceEx函数使用。它不能真正工作。是的,您可以添加“虚拟”文件系统。但它要么对用户X可见,要么不可见。Windows上的访问控制基于每个用户,而不是每个程序。因此,如果用户X可以在应用程序A中看到字体,他也可以在应用程序B中看到字体-即使B是Explorer.EXE。如果您没有得到正确的答案,可能您没有问正确的问题 你的文章标题提到了“虚拟文件系统”,但是。后来,您提到“使用字体” “虚拟文件系统”是一个含糊不清的术语,有几种用法。 一种常见情况是,向O.S.添加设备或网络 在您的情况下,似乎是从应用程序中访问 有几种方法(“库”)可以模拟或使用文件系统 其中一些独立于真正的文件系统工作。您可以使用它们,将数据保存在那些“虚拟”文件夹和文件中,并从真实和虚拟文件夹复制数据 其中一些作为扩展层在实际文件系统和编程文件系统之间工作 示例:我使用的是一个需要临时快速I.O.访问的应用程序。找到了一个库,当您想在真正的文件系统中创建文件夹或保存文件时,就完成了 此外,我还可以添加存储在内存中但通过文件系统操作访问的“虚拟驱动器”。当应用程序完成时,“硬盘”及其数据将从内存中擦除 看来你的情况和我的例子很相似 您想要一个“虚拟文件系统”库做什么 <>我见过网上的ONB,几个图书馆,C++,开源,免费软件,商业版。 这取决于你想做什么,找出哪个库更适合你的案例
祝你好运如果用户是管理员,如果他们有足够的决心,你就不能阻止他们查看字体文件。例如,他们可以对您的程序进行反向工程,以了解您是如何生成文件的,并手动重复该过程以制作自己的副本。或者(即使您可以以某种方式将文件权限绑定到您的进程),他们也可以在您的进程中插入自己的代码来检索文件,或者直接从内存中检索字体信息 如果这足以让他们难以看到字体文件,您可以尝试以下方法:
另一种可能的选择是,只使用AddFontMemResourceEx,忍受字体不可枚举的事实。您只需更改代码,以便无论在何处枚举字体,它都会手动将您的字体添加到列表中。开始查看为什么不在临时文件中使用字体?如问题中所述,AddFontResourceEx需要将文件路径作为其参数之一。所以我只想保护字体文件不被用户使用。或者通过使用一些复杂的东西,比如VFS,或者通过加密。如果你对此有任何想法,请分享。感谢您刚才提到的回复,但问题是如果加载的字体处于活动状态,则应用程序不允许删除该字体。谢谢你的回复。