我的程序中有一系列文件,它们接收用户输入并将它们存储为KeyValuePair
,其中一些文件具有名称,其中大多数只有一个与之关联的数字ID。此信息需要在应用程序启动和停止期间保持不变。我已经尝试了几种方法,但我不能让它们中的任何一种方法正常工作。
我的方法是简单地拥有一个Content文件夹,其中包含我知道可以预期的.json
个文件。程序首次启动时,它使用Newtonsoft JSON反序列化程序读取文件,并将其作为List<KeyValuePair<int,string>
加载到内存中的适当位置。这一切都很好,但是获得文件的路径已经证明非常困难。
我从文字开始,但后来意识到我需要能够在任何目录中拥有该程序。所以我尝试找到文件的绝对路径,给出它与项目的相对名称。仍然无法正常工作,因为调试和发布目录,以及复制编译的东西。作为一个小问题,我也很生气,我仍然需要在这里使用字符串文字。
所以,我决定将其作为.resx
文件。这立即失败,因为您无法在运行时编辑.resx
。因此,引用了.json
中的外部.resx
文件。从.resx
获取URI或路径的过程即使不是不可能,也证明是难以忍受的。我第一次尝试了
Assembly.GetExecutingAssembly().GetManifestResourceStream("MyJsonFile.Json")
我希望它可以工作,但没有。
所以我打印出String.Join(Assembly.GetExecutingAssembly().GetManifestResourceNames()) all I got out from the console was
MyNamespace.Properties.Resources.resources`并没有说明如何进一步解除任何特定资源的位置。
我甚至尝试Assembly.GetExecutingAssembly().Location
并且无法在那里做任何有用的事情,因为它在调试文件夹中引用了我的exe。
我最后的希望是一个嵌入的内容文件,但我也无法在运行时保存它们。我可以使用URI而不是文字字符串来正确引用,但是我无法在运行时中保存它们,就像我需要为了节省编辑,或者甚至在关闭时从内存中保存。
如果有人能够在不使用文字的情况下向我提供有关如何在解决方案中解除文件的URI或路径的明确信息,我将非常感激。因为我已经完成了研究工作和我所拥有的工具。
答案 0 :(得分:1)
如果将其放在bin / debug文件夹中,则不需要路径。你只需要文件的名称。
否则将路径放在.config
文件中,然后从那里读取它:
<appSettings>
<add key="Path" value="PathToFiles"/>
</appSettings>
然后得到这样的设置:
using System.Configuration;
string path = ConfigurationManager.AppSettings["Path"];
确保导入