【问题标题】:OPEN a Resource.resx file instead of Creating it which overrides the previous Resource.resx file打开一个 Resource.resx 文件而不是创建它,它会覆盖以前的 Resource.resx 文件
【发布时间】:2011-06-11 20:22:55
【问题描述】:

我从 Visual Studio 2010 中启动我的应用程序。 然后我将一些文件添加到我的应用程序中,每个文件类型的图标(例如来自 doc、docx、xls、pdf 等的图标)作为字符串/位图键/值对通过

添加到我的 IconImages.Resx 文件中
private void DumpTempResourceToRealResourceFile(IDictionary<String, Bitmap> tempResource)
        {

            using (ResXResourceWriter writer = new ResXResourceWriter("IconImages.Resx"))
            {
                foreach (KeyValuePair<String,Bitmap> item in tempResource)
                {
                    writer.AddResource(item.Key, item.Value);                    
                }
                writer.Generate();
            }            
        }

将图标添加到资源后,我关闭应用程序。

然后我使用 VS 2010 再次启动我的应用程序,并在我的文档应用程序中添加一些文件。文件类型再次写入我的 IconImages.Resx。 然后我关闭我的应用程序并检查 \bin\ 文件夹下的 IconImages.Resx 文件,之前保存的图像已经消失,我现在有了新的/不同的图像。

为什么我不能说打开一个 .resx 文件并将内容附加到它?每次我创建一个具有相同名称“IconImages.Resx”的 ResourceWriter 对象时,我都会覆盖之前添加的内容,这很愚蠢。

我的 IconImages.Resx 文件如何在应用程序会话期间保持活动状态而不会被我添加的其他内容覆盖?

【问题讨论】:

  • 请随意解释名字中的“作家”,它不知道如何阅读。该类在您的场景中没有用,它旨在实现 .NET 工具。
  • 在我的场景中没用?你能解释一下我还应该做什么吗?我的用户可以将文档/文件添加到列表框,该列表框会在每个文档旁边显示一个保存的文件类型图标 - 某处,某处有待讨论...- 现在我选择了 .resx 文件,但你说那不好?那么保存 String/Bitmap 键/值对的更合适的方法是什么?
  • Windows 目录? .zip 存档?你根本没有解释你为什么要这样做,我猜不出正确的答案。
  • 那么我现在解释一下:我的用户可以将文件添加到应用程序中的 Document_ListBox。在添加文件时,我为每个文件获取文件类型 Icon 并保存位图 - icon.ToBitmap() - 文件扩展名字符串如“.docx”作为 .resx 文件中的键/值对。当用户重新启动应用程序并加载我想为每个文档显示的文档时,文件类型为从 resx 文件中读取的图标。我不想将文件类型的图标保存在数据库中。它只是内部应用程序数据。你现在明白汉斯了吗?
  • 嗯,你编辑了。因此,您真正想要做的是缓存文档的图标。可能是因为重新显示列表框时重新创建它太慢了?真的吗? Windows 已经这样做了,Windows Explorer 也这样做了。你在利用它吗?

标签: c# resources resx


【解决方案1】:

我没有用过 ResXResourceWriter,但通常 *Writer 类只是从头开始写一个数据文件。

如果您想“追加”新数据,您通常必须使用 *Reader 类将现有数据反序列化到内存中,然后合并/添加您希望的任何新数据,然后使用 *Writer 对象将结果数据写回。看看ResXResourceReader 看看它是否支持你需要这样做。

【讨论】:

  • 首先您的答案令人困惑。其次,在检查资源是否已添加某个文件扩展名时,我已经使用了 ResXResourceReader。
【解决方案2】:

我现在有一个查找表“FiletypeImage”,文件类型为“.docx”,原始二进制数据也称为 blob。该表在我的 documentService 中检索并缓存在静态变量中。使用我的 DocumentListViewModel 调用的 Get 和 Add 方法。它对 sqlite 非常快 :)

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多