XNA ContentLoadException из массива, заданного Directory.GetFiles, когда файл явно находится
Сначала я хотел бы заявить, что это не Content.RootDirectory = "Content"; проблема. Я пробовал это с и без этой строки кода. У меня есть класс с именем FileFactory, который имеет три словаря. Один для текстур, один для звуков и один для спрайтовых шрифтов. У меня также есть другие фабрики, которые загружают в файлы XML для других типов объектов, и они работают отлично. Вот код, который загружает шрифты:
public static void LoadFonts(ContentManager content)
{
string[] filePaths = Directory.GetFiles(@"Content\fonts\");
string key;
foreach (string s in filePaths)
{
key = Path.GetFileNameWithoutExtension(s);
Fonts.Add(key, content.Load<SpriteFont>(s));
}
}
Это ошибка: "Ошибка загрузки"Content\fonts\ammoFont.xnb". Файл не найден". хотя файл там CLEARLY, учитывая, что он должен находиться в каталоге, который будет добавлен в массив filePaths в виде строки. Я даже проверил папку, и она там. Вот полная ошибка:
Microsoft.Xna.Framework.Content.ContentLoadException не было обработано
Сообщение = Ошибка загрузки "Content \ fonts \ ammoFont.xnb". Файл не найден.
Source = Microsoft.Xna.Framework StackTrace: в Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) в Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject) Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName) в OfUnknownOrigin.FileFactory.LoadFonts(содержимое ContentManager) в C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\ \ FileFactory.cs: строка 38 в WindowsGame1.UnknownOrigin.LoadContent() в C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs: строка 110 в Microsoft.Xna.Framework.Game.Initialize() в WindowsGame1.UnknownOrigin.Initialize() в C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs: строка 102 в Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) в Microsoft.Xna.Framework.Game.Run() в WindowsGame1.Program.Main(String[] args) в C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Program.cs: строка 15 InnerException: System.IO.FileNotFoundException Сообщение = Ошибка загрузки "Content\Content\fonts\ammoFont.xnb.xnb" ". Файл не найден. Source=Microsoft.Xna.Framework StackTrace: в Microsoft.Xna.Framework.TitleContainer.OpenStream(имя строки) в Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) InnerException:
Ответ: Измените этот код:
Fonts.Add(key, content.Load<SpriteFont>(s));
к этому:
Fonts.Add(key, content.Load<SpriteFont>("fonts\\" + key));
2 ответа
Из сообщения об исключении похоже, что строка, с которой вы ее вызываете, неверна. Контент находится там дважды, а расширение - там дважды:
Error loading "Content\Content\fonts\ammoFont.xnb.xnb"
Вы не опубликовали код, в котором инициализировали массив, но если они есть в определении, удалите их.
Пути к игровому контенту должны соответствовать вашим Content.RootFolder
("Содержимое \" по умолчанию) и не должно содержать расширение файла (поэтому избегайте дублирования имен файлов, даже если расширения отличаются).