我一直在调查一段时间,以防止我的用户意外地输入我的应用程序的数据目录。
我的应用程序使用文件夹来存储结构化项目。文件夹内部结构是批评者,不应该搞砸。我希望我的用户将整个文件夹视为一个整体而无法打开它(如Mac包)。
有没有办法在Windows上执行此操作?
根据当前答案进行编辑
当然,我并不是想阻止我的用户访问他们的数据,只是保护他们不会意外破坏数据的完整性。因此不需要加密或密码保护。
谢谢大家的.Net答案,但不幸的是,这主要是一个C ++项目,不依赖于.Net框架。
我提到的数据并不清晰,它们是从电子显微镜获取的图像。这些数据可能很大(~100 MiB到~1 GiB),因此无法将所有内容加载到内存中。这些是巨大的图像,因此存储必须提供一种通过一次访问一个文件来逐步读取数据的方法,而无需将整个存档加载到内存中。
此外,该应用程序主要是遗留一些我们甚至不负责的组件。允许我保留当前IO代码的解决方案更可取。
Shell扩展看起来很有趣,我将进一步研究解决方案。
LarryF,您能详细说明Filter Driver或DefineDOSDevice吗?我不熟悉这些概念。
答案 0 :(得分:1)
您的计划内部或外部?
有方法,但没有一个容易。您可能会在文件系统上查看过滤器驱动程序。
答案 1 :(得分:1)
你可以做几件事:
有一件事是你可以创建一个FolderView Windows Shell扩展,为你的关键文件夹创建一个自定义视图。通过创建自定义FolderView,你可以使文件夹只是空白,只有一行文字“没什么可看的”,或者你可以做一些更复杂的事情,比如使用同样方法的GAC查看器。这种方法相当复杂,但可以通过使用this CodeProject文章库作为基础来减轻这种复杂性。
另一个解决方案是执行ZIP虚拟文件系统,这将要求您直接替换使用System.IO的任何代码以使用其他内容。 ASP.NET 2.0出于这个原因这样做了,你可以很容易地构建它,在实现VirtualPathProvider时看一下这个MSDN Article。
答案 2 :(得分:1)
如果你采用ZIP文件方式,(我考虑过你,但没有提到它)我建议使用deflate算法,但使用你自己的文件系统...看看类似TAR格式的东西。然后,只需编写代码,将所有I / O通过Inflate / Deflate算法传递到磁盘。我不会使用ZIP“FORMAT”,因为它太容易看文件,找到PK作为前两个字节,并解压缩你的文件....
我最喜欢Joshperry的建议。
当然,您也可以编写一个设备驱动程序,将所有数据存储在一个文件中,但同样,我们正在查看驱动程序。 (我不确定你是否可以在驱动程序之外实现它..你可以,并且在程序内部调用DefineDOSDevice,给它一个只有你的代码才能访问的名称,它将被视为一个普通的文件系统。 )。我会玩一些想法,如果它们有效,我会给你一个样本。现在你让我感兴趣了。
答案 3 :(得分:1)
Structured Storage专为您描述的方案而设计:
结构化存储通过将单个文件作为存储和流的对象的结构化集合来提供COM中的文件和数据持久性。
“存储”类似于文件夹,“流”类似于文件。基本上,您只有一个文件,当使用结构化存储API访问时,它的行为和外观就像一个完整的自包含文件系统。
请注意:
对COM技术的深入了解是开发使用结构化存储的先决条件。
答案 4 :(得分:0)
您可以将项目目录包装到.zip文件中并将数据存储在那里,就像使用.jar一样(我知道.jar几乎是只读的,这是为了示例)。制作非标准扩展名,以便双击不会立即生效。 ; - )
当然这意味着您必须将所有文件IO包装起来使用.zip,这取决于程序的构建方式,这可能会很乏味。它已经为Java完成了:TrueZip。也许你可以用它作为灵感?
如果你受到诱惑 - 我不建议摆弄文件夹权限,原因显而易见,这对你没有帮助。
答案 5 :(得分:0)
您可以使用隔离存储。
http://www.ondotnet.com/pub/a/dotnet/2003/04/21/isolatedstorage.html
它并没有解决所有问题,但它确实使应用程序数据远离危害。
答案 6 :(得分:0)
请记住:如果将其存储在文件系统中,用户将始终能够看到它。篡改资源管理器,我使用cmd.exe代替。或者总指挥官。或其他任何事情。
如果您不希望别人弄乱您的文件,我建议
当然,这不是完全保护,但它实施起来相当简单,不要求你在操作系统中安装时髦的东西,并且应该远离最好奇的用户。
当然,如果不控制计算机本身,您将永远无法完全控制用户计算机上的文件。
答案 7 :(得分:0)
我见过软件(Visual Paradigm的Agilian)使用Tomalak建议将zip存档作为“项目文件”。 Zip文件很好理解,并且使用非标准文件扩展名确实可以防止临时用户弄乱'文件'。这样做的一大优点是,在发生损坏的情况下,可以使用标准工具来解决问题,而且您不必担心创建支持主应用程序的特殊工具。
答案 8 :(得分:0)
答案 9 :(得分:0)
看起来有些Windows ports of FUSE开始出现了。我认为这将是最好的解决方案,因为它可以让我保持遗留代码(非常大)不受影响。