如何用C#批量导入资源文件夹中的多个文件?

发布于 2024-12-08 17:53:06 字数 297 浏览 1 评论 0原文

我在资源文件夹的子文件夹(例如资源/位图)中有一些位图,我想一次将它们加载到位图 [] 中,也就是说,

BitmapSource[] bitmaps=
    TheMethodIWantToImplement(
    new Uri("pack://application:,,,/MyAssembly;component/Resources/Bitmap", 
    UriKind.Absolute));

但我发现 Directory.GetFiles 不接受 Uri 参数。那么……我该怎么办?谢谢。

I have some bitmaps in a sub-folder of resource folder (say, Resource/Bitmap) and I want to load them into a bitmap[] at one time, that is,

BitmapSource[] bitmaps=
    TheMethodIWantToImplement(
    new Uri("pack://application:,,,/MyAssembly;component/Resources/Bitmap", 
    UriKind.Absolute));

But I found that Directory.GetFiles does not accept an Uri argument. So...What should I do? Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

动次打次papapa 2024-12-15 17:53:06

谢谢你,@Teudimundo。我修改了该链接的片段如下:

var asm = Assembly.GetEntryAssembly();
string resName = asm.GetName().Name + ".g.resources";
using (var stream = asm.GetManifestResourceStream(resName))
using (var reader = new System.Resources.ResourceReader(stream))
{
    var paths = from entry in reader.Cast<DictionaryEntry>()
                where ((string)entry.Key).Contains("sub-folder-name")
                select entry.Key;
    if (paths.Any())
    {
        foreach (string path in paths)
        {
            Uri uri = new Uri(String.Format(
                      "pack://application:,,,/{0};component{1}", asm.GetName(), path)
                      , UriKind.Absolute);
            //use the uri for the rest
        }
    }
}

但我仍然想直接使用资源流(可以通过上面 LINQ 表达式中的 selectentry.Value 检索),它是 非托管内存流。我需要 MemoryStream 来构造我的对象,但我没有找到优雅的转换方法。

Thank you, @Teudimundo. I modified the snippet of that link as follows:

var asm = Assembly.GetEntryAssembly();
string resName = asm.GetName().Name + ".g.resources";
using (var stream = asm.GetManifestResourceStream(resName))
using (var reader = new System.Resources.ResourceReader(stream))
{
    var paths = from entry in reader.Cast<DictionaryEntry>()
                where ((string)entry.Key).Contains("sub-folder-name")
                select entry.Key;
    if (paths.Any())
    {
        foreach (string path in paths)
        {
            Uri uri = new Uri(String.Format(
                      "pack://application:,,,/{0};component{1}", asm.GetName(), path)
                      , UriKind.Absolute);
            //use the uri for the rest
        }
    }
}

But I still want to use the resource stream directly (can be retrieved via select entry.Value in the LINQ expression above), which is an instance of UnmanagedMemoryStream. I need MemoryStream to construct my object but I found no elegant methods for conversion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文