动态获取 Json 个文件名
Dynamically obtaining Json Filenames
我的程序中有一系列文件,它们接受用户输入并将它们存储为 KeyValuePair
其中一些文件有名称,大多数文件只有一个与之关联的数字 ID。此信息需要在应用程序启动和停止期间保持持久。我已经尝试了几种方法,但我无法使它们中的任何一种都能正常工作。
我的方法是简单地拥有一个 Content 文件夹,里面装满了 .json
我知道我可以期待的文件。当程序首次启动时,它使用 Newtonsoft JSON 反序列化器读取文件,并将其作为 List<KeyValuePair<int,string>
加载到内存中的适当位置。一切正常,但事实证明获取文件的路径非常困难。
我从文字开始,但后来意识到我需要能够将程序放在任何目录中。所以我试着找到文件的绝对路径,给定它与项目的相对名称。仍然不起作用,因为调试和发布目录,以及复制编译内容。作为一个小问题,我也很生气,我仍然需要在这里使用字符串文字。
所以,我决定将其设为 .resx
文件。这立即失败了,因为您无法在 运行 时编辑 .resx
。因此,从 .resx
引用了外部 .json
文件。从 .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 或路径,我将不胜感激。因为我所做的研究和我拥有的工具一无所获。
如果将其放在 bin/debug 文件夹中,则不需要路径。您只需要文件的名称。
否则将路径放在 .config
文件中,然后像这样从那里读取它:
<appSettings>
<add key="Path" value="PathToFiles"/>
</appSettings>
然后得到这样的设置:
using System.Configuration;
string path = ConfigurationManager.AppSettings["Path"];
确保导入
我的程序中有一系列文件,它们接受用户输入并将它们存储为 KeyValuePair
其中一些文件有名称,大多数文件只有一个与之关联的数字 ID。此信息需要在应用程序启动和停止期间保持持久。我已经尝试了几种方法,但我无法使它们中的任何一种都能正常工作。
我的方法是简单地拥有一个 Content 文件夹,里面装满了 .json
我知道我可以期待的文件。当程序首次启动时,它使用 Newtonsoft JSON 反序列化器读取文件,并将其作为 List<KeyValuePair<int,string>
加载到内存中的适当位置。一切正常,但事实证明获取文件的路径非常困难。
我从文字开始,但后来意识到我需要能够将程序放在任何目录中。所以我试着找到文件的绝对路径,给定它与项目的相对名称。仍然不起作用,因为调试和发布目录,以及复制编译内容。作为一个小问题,我也很生气,我仍然需要在这里使用字符串文字。
所以,我决定将其设为 .resx
文件。这立即失败了,因为您无法在 运行 时编辑 .resx
。因此,从 .resx
引用了外部 .json
文件。从 .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 或路径,我将不胜感激。因为我所做的研究和我拥有的工具一无所获。
如果将其放在 bin/debug 文件夹中,则不需要路径。您只需要文件的名称。
否则将路径放在 .config
文件中,然后像这样从那里读取它:
<appSettings>
<add key="Path" value="PathToFiles"/>
</appSettings>
然后得到这样的设置:
using System.Configuration;
string path = ConfigurationManager.AppSettings["Path"];
确保导入