我担心在FAT文件系统上使用内存映射IO(通过CreateFileMapping)会带来危险。具体情况是用户直接从USB记忆棒打开文档(是的,你尝试并禁止他们这样做!)。
MSDN Managing Memory-Mapped Files article没有提及文件系统限制。
更新
我没有任何真正的理由感到担心,但我有一种模糊的感觉,我在某些时候会读到他们的问题(我的职业生涯超过25年,所以我的记忆中有很多模糊的深度,所有回到8位微处理器的方式!)。是否应该支持它们的问题对我来说非常重要,所以我想问一下是否有人可以证实我的担忧。谢谢你让我放心。
答案 0 :(得分:7)
内存映射文件是我最喜欢的功能之一。 绝对没有危险。它是基本极其优化的Windows I / O功能之一。如果一个人启动EXE或加载间接DLL,它将在内部实现为内存映射文件映射。
支持所有类型的文件系统,包括FAT。
顺便说一下, atzz 表示网络驱动器上允许使用内存映射文件。我可以添加它不仅是允许的,但严格建议使用内存映射文件和网络文件。在这种情况下,I / O操作将以非常好的方式缓存,而其他(C / C ++)I / O则无法完成。
如果你想要从CD或网络打开EXE不会崩溃,可以用标题中的一位标记Program Executable(链接器开关/ SWAPRUN参见http://msdn.microsoft.com/en-us/library/chzz5ts6.aspx)。从USB记忆棒打开的文件没有选项。
但是用户究竟有什么问题?他们不使用“安全删除硬件”图标吗?然后他们必须学会这样做,就像他们必须学会不切换电脑电源一样,但要正常关机。
你能解释为什么你会发现使用内存映射文件的危险,以及在哪些情况下你遇到问题并使用其他I / O操作没有这样的问题?
答案 1 :(得分:6)
是的。它甚至支持在CDFS或网络驱动器上映射文件。你怀疑的根源是什么?