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 ("Содержимое \" по умолчанию) и не должно содержать расширение файла (поэтому избегайте дублирования имен файлов, даже если расширения отличаются).

Другие вопросы по тегам