【问题标题】:How to get all files list from a relative URI in XAML application?如何从 XAML 应用程序中的相对 URI 获取所有文件列表?
【发布时间】:2013-07-01 20:46:36
【问题描述】:

如何使用相对路径从 XAML 应用程序中的文件夹中获取所有文件?

我正在使用 WPF 中构建的 Kinect 应用程序。应用程序中使用的所有图像都在 [project dir]\Images\ 和所有背景都在 [project dir]\Images\Backgrounds\

我想使用相对路径从背景目录中获取所有图像的列表。我试过了

DirectoryInfo(@"\Images\Backgrounds\").GetFiles();

但它说背景目录必须存在于[full path+project dir]\debug\bin\

手动选择每个图像效果很好

Uri uri = new Uri(@"Images\Backgrounds\Background1.png", UriKind.Relative);
ImageSource imgsource = new BitmapImage(uri);
this.Backdrop.Source = imgsource;

【问题讨论】:

    标签: c# wpf xaml directory relative-path


    【解决方案1】:

    它适用于单个文件,因为您指定了嵌入程序集中的资源的 URI,而不是驱动器上的某个文件夹,而 GetFiles() 仅适用于特定的物理文件夹。因此,要么您需要复制所有图像而不是嵌入它们,要么使用下面的代码,resourceNames 应该为您提供可以在项目中通过 URI 引用的所有资源的名称:

    List<string> resourceNames = new List<string>();
    var assembly = Assembly.GetExecutingAssembly();
    var rm = new ResourceManager(assembly.GetName().Name + ".g", assembly);
    try
    {
        var list = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true);
        foreach (DictionaryEntry item in list)
            resourceNames.Add((string)item.Key);
    }
    finally
    {
        rm.ReleaseAllResources();
    }
    

    如果您需要,此时每个item.Value 包含每个资源的UnmanagedMemoryStream

    【讨论】:

    • 我正在开发的 Kinect 应用程序是 Kinect SDK v1.5 的 GreenScreen 示例。我只是想用代码改变背景。
    • “它适用于单个文件,因为您指定了嵌入程序集中的资源的 URI”它是如何嵌入的?这些图像都没有添加到“资源”中(在 Visual Studio 中)。 URI 是相对的。
    • @LifeH2O,您没有将这些文件添加到项目中吗?它们是否在 VisualStudio 中的解决方案树中显示?
    • 我发现图片被添加到资源中。当我通过单击“源”按钮设置背景源时,我可以看到这一点。路径显示为“/GreenScreen-WPF;component/Images/Backgrounds/Background.png”
    • @LifeH2O:因此您的单个文件的 URI 可以正常工作,因为它不是真正的文件夹。在您的解决方案中,您可以更改它将对图像执行的操作,如果您将 Build Action 设置为 None 并将 Copy to Output Directory 设置为 Copy always,那么 VS 将不会嵌入图像,而是将它们复制到物理输出目录,而您的 GetFiles() 将按预期工作
    【解决方案2】:

    我会回复你的帖子而不是发布解决方案,但我是这个网站的新手,还没有那个特权....嘿!只是想帮忙。

    无论如何,关于 DirectoryInfo,我之前也遇到过类似的问题。不记得我是如何解决它的,但我记得反斜杠很棘手。你检查过 MSDN 网站吗?它似乎找不到您的目录,因此默认情况下在调试中查找它。 MSDN 说格式应该是 C# 中的“MyDir\MySubdir”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2015-03-19
      相关资源
      最近更新 更多