搜索目录时找不到文件?

时间:2013-06-01 19:26:52

标签: c# xna xna-4.0

int d = 0;
foreach (string curFile in System.IO.Directory.GetFiles("Content/img/"))
{
    tiles[d] = Content.Load<Texture2D>(curFile);
    d++;
}

我有上面的代码,它应该搜索目录img,并将每个文件分配给tiles[]数组。但是,它似乎正在搜索.xnb文件,而不是.png,我将图像保存为。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

Directory.GetFiles(string path)将返回该目录中每个文件的完整路径。由于您只需要.png文件,因此应使用Directory.GetFiles(string path, string searchPattern),它采用指定搜索模式的第二个参数。

Directory.GetFiles("Content/img/", ".png");

此外,由于你正在使用tiles的数组,我认为你的代码存在问题,因为你可能不知道你要从中加载多少纹理目录。相反,我建议您使用List<T>

var tiles = new List<Texture2D>();
foreach (var imagePath in System.IO.Directory.GetFiles("Content/img/", ".png"))
{
    tiles.Add( Content.Load<Texture2D>(imagePath) );
}

你甚至可以得到一点LINQ疯狂,并在“一”行中做到:

var tiles = Directory.GetFiles("Content/img/", ".png")
            .Select( Content.Load<Texture2D> );

答案 1 :(得分:1)

Xna中的内容管理器使用预编译的xnb文件。

所以你必须搜索xnb文件,删除扩展名adn使路径相对于内容管理器根目录。

var tiles = new List<Texture2D>();
foreach (var imagePath in System.IO.Directory.GetFiles("Content/img/", ".xnb"))
{
    var xnaPath = Path.Combine( "Content/img",
                                 Path.GetFileNameWithoutExtension(imagePath));

    tiles.Add( Content.Load<Texture2D>(xnaPath) );
}

如果您的内容管理员根文件夹是“内容”,那么您应该与“img”文件夹合并,而不是“content / img”