便携式应用程序的C#存储文件夹位置

时间:2020-08-28 16:54:18

标签: c# .net

我需要一种为便携式应用程序找到文件夹的方法,该文件夹可以在存在的情况下始终找到(否则可以创建),并且用户和应用程序都可以访问该文件夹,以便其中的文件可以由用户编辑和添加,然后由应用程序读取/编辑(因此,嵌入式资源无法解决问题)。

我的问题是我不知道默认文件夹/目录应该在哪里。它应该与应用程序.exe位于同一文件夹中吗?我应该使用SpecialFolder吗?还是完全其他?

这实际上是一个有关C#和.NET中可移植应用程序的标准实践的问题,而不是有关如何直接实现此问题的问题(尽管链接到所提到的任何特定类/代码仍然会很有帮助)。

到目前为止我的想法:

  • 我更喜欢将其放置在与 .exe,如果移动了应用程序文件夹,则重要 仍然可以轻松地手动找到文件。但是,如果用户要移动 到Program Files的应用程序或其他内容(似乎没有 太不合理了?),我担心文件可能最终需要 管理员具有编辑/打开的权限,这将破坏应用程序。

  • 使用用户目录或类似目录也可以,但是我不知道 便携式应用程序是否可以接受的标准做法 正在写入用户文件夹(就我个人而言似乎有点不对劲)。但是我不 知道是否有办法使它更美味?

任何建议将不胜感激。

3 个答案:

答案 0 :(得分:1)

在Windows中,程序文件归操作系统所有,而不是用户和应用程序所有。这是操作系统用于存储第三方数据(包括二进制文件)的安全位置。标准用户无法在其中写入数据。

您绝不能试图规避这一点,以允许用户或第三方应用程序在那里更改数据,这样做允许第三方将键盘记录程序,后门程序,新帐户,比特币矿工,木马,rootkit和勒索软件安装到您的操作系统中系统。永远都不要这样做。

即使您这样做了,它不会工作。当用户卸载应用程序时,程序文件中的数据将被删除。如果用户或实用程序执行磁盘修复,则程序文件中的数据将被删除并从保存点还原。您可以在其中存储的所有数据都将很快被删除。如果您的应用程序是容器化的,则每次用户关闭该应用程序时,您的数据都会被删除。

如果数据是只读的,则可以将数据存储在程序文件中。如果您的应用程序需要某种永久性查找数据;说出永远不变的单词词典,将其存储在程序文件中。删除应用程序后将删除该文件,恢复该应用程序后将恢复该文件。

如果您的用户想要存储数据,并希望下次运行该应用程序时,或者在卸载该应用程序后该数据在那里,则必须将其存储在Windows SpecialFolder之一中。哪一个?这完全取决于您想访问谁,以及他们如何获取数据。共享吗?您要使用文件对话框吗?您还没有解释这些事情,所以我们不能给您答案。

这些文件夹都没有被隐藏;如果您想向用户和其他应用程序隐藏数据,请Isolated Storage

“便携式应用程序”是什么意思?您是说可以将USB驱动器上的应用程序插入任何随机计算机,运行您的应用程序,存储一些数据,拔下USB驱动器,将其插入另一台计算机,再次运行应用程序并且数据仍然存在吗?您正在寻找虚拟机;创建一个普通的Windows应用程序,将数据存储在SpecialFolders中。应用程序完成后,在USB驱动器上创建虚拟机,然后将应用程序安装到其中。这就是创建便携式磁盘实用程序和Web浏览器的方式。要做很多工作,首先必须首先使程序正常运行。

答案 1 :(得分:0)

如果您正在谈论将文件放置在广泛分布的应用程序的位置,那么在Windows上,我相信Program Files(x86)将是一个使用的好地方,并且如果您谈论的是Linux发行版,那么/ etc是正常的。我在职业发展中必须做出的个人认识是,认识到那些地方通常是我“神圣的”或“真正的开发人员”,而我是真正的开发人员。

如果这只是一个与几个人共享的个人应用程序或类似的东西,我认为.exe的位置是一个非常合适的存储位置。

答案 2 :(得分:-1)

这是使用程序目录的标准做法。您所需要做的就是获取包含可执行文件的文件夹并使用它。例如,创建所需数量的新文件夹并将对象放置在其中。即使用户使用可执行文件移动了主目录,您的程序也将能够找到新路径以及其中包含的所有文件。

(我不能将此作为评论,因为SO要求我更多声望)