在搜索目录时找不到文件
本文关键字:找不到 文件 搜索 | 更新日期: 2023-09-27 18:16:37
int d = 0;
foreach (string curFile in System.IO.Directory.GetFiles("Content/img/"))
{
tiles[d] = Content.Load<Texture2D>(curFile);
d++;
}
我有上面的代码,它应该搜索目录img
,并将每个文件分配给tiles[]
数组。然而,它似乎是搜索.xnb
文件,而不是.png
's,我有图像保存为。我该如何解决这个问题?
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有点疯狂,在"one"行中做:
var tiles = Directory.GetFiles("Content/img/", ".png")
.Select( Content.Load<Texture2D> );
Xna中的内容管理器使用预编译的xnb文件。
因此,您必须搜索xnb文件,删除扩展名并使路径相对于内容管理器根。
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) );
}
如果您的内容管理器根文件夹是"content",那么您应该与"img"文件夹合并,而不是"content/img"文件夹