我正在开发一个简单的程序,其中一部分从 txt 文件填充列表。
这可能不是一个聪明的问题,但是我没有找到任何关于此的信息。我想知道将文本文件放在应用程序目录中的最佳位置在哪里。
O知道Resouces
但是,我无法获得存储在那里的文件的路径。
所以2个问题:
放置txt文件的最佳位置在哪里?(或在应用程序中使用的任何其他重要文件)
如果我把文件放在
Resources
我如何得到它的路径?
(对不起我的英语)
如果这些是您不需要向用户公开并且仅用于内部目的的文件,那么您可以将它们作为资源嵌入到您的程序集中,并在需要时提取它们。
为此,请在您的应用程序中创建一个新目录。我们称之为“资源”。然后,向其中添加文本文件。使用每个文本文件的属性窗口将BuildAction设置更改为“嵌入式资源”。然后,在你的代码中,一旦你需要文件的内容,你可以使用这样的代码来提取它:
using System.Reflection;
// ...
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApplication.Resources.MyFile.txt")) {
using (StreamReader reader = new StreamReader(stream)) {
string contents = reader.ReadToEnd();
// Do stuff with the text here
}
}
如果您不想这样做,放置文件的正确位置是您在 AppData 目录下创建的目录。这是一个已知的系统路径,您可以像这样获取它:
string folderLocation = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string myPath = Path.Combine(folderLocation, "MyAppName");
然后,您可以使用一个StreamReader
或其他类System.IO
来查找/枚举和读取文件。
当应用程序具有关联/伴随数据文件时,有时将它们作为资源嵌入是有意义的,因为这样它们被篡改的机会就会减少,例如删除或修改数据。
在其他时候,保持文件松散是有意义的......所以你必须决定存储它们的最佳位置......你可以将它们定位在安装应用程序的地方,或者在 Application Data/AppData目录。
要在资源中嵌入文件,请查看此链接:
它有一个分步指南显示如何嵌入文件(例如,文本文件到资源中),然后使用 aStreamReader
访问它并读取其内容。
要存储文件并从适当位置的目录访问它们,您可以使用:
System.Environment.SpecialFolder.ApplicationData
和
Environment.GetFolderPath()
找出 AppData 目录在哪里。
然后,当您创建应用程序安装程序/安装程序时,您应该让它在 AppData 下为您的应用程序创建一个目录,然后您可以决定要将哪些文件安装到该位置。
看:
请注意,ApplicationData“漫游”...即当您登录到另一台机器时,文件将作为您的配置文件的一部分传输到该机器上......您可能不想要这个......所以您可以改用:
System.Environment.SpecialFolder.CommonApplicationData