我在尝试将资源文件写入磁盘时遇到问题(所有资源文件都是同一项目和程序集的一部分)。
如果我添加
var temp = Assembly.GetExecutingAssembly().GetManifestResourceNames();
这将返回string[]
以下格式的 a
Gener.OptionsDialogForm.resources
Gener.ProgressDialog.resources
Gener.Properties.Resources.resources
Gener.g.resources
Gener.Resources.reusable.css
Gener.Resources.other.jpg
数组的最后 2 个是我想要的唯一 2 个文件,但我认为这不能保证总是如此。随着代码的更改,数组可能会以另一个顺序出现,因此我无法明确调用给定索引 ( temp[4]
)处的项目
所以,我可以做
foreach (string item in Assembly
.GetExecutingAssembly()
.GetManifestResourceNames())
{
if (!item.Contains("Gener.Resources."))
continue;
//Do whatever I need to do
}
但这太可怕了!这种方法我面临另一个问题;这不会返回带有扩展名的文件名,只是Name
这样,我不知道扩展名是什么。
这是当前的代码
public void CopyAllFiles()
{
var files = Resources.ResourceManager.GetResourceSet(System.Globalization.CultureInfo.CurrentUICulture, true, true);
//var temp = Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (DictionaryEntry item in files)
{
using (var resourceFileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Gener.Resources." + item.Key.ToString() + ".css")) // this won't work, I can't hard code .css as the extension could be different
{
Stream stream = new FileStream(this.DirPath, FileMode.Create, FileAccess.Write);
resourceFileStream.CopyTo(stream);
stream.Dispose();
}
}
files.Dispose();
}
但这似乎......错了......这是其他人会怎么做的吗,我确定我错过了一些东西,而且这样的任务很常见,有更好的解决方案吗?