XNA ContentLoadException from array given by Directory.GetFiles when file is clearly there

StackOverflow https://stackoverflow.com/questions/14782571

  •  07-03-2022
  •  | 
  •  

質問

First I would like to state that this is not a Content.RootDirectory = "Content"; problem. I've tried this with and without that line of code. I have a class called FileFactory that has three dictionaries. One for textures, one for sounds, and one for sprite fonts. I also have other factories that load in XML files for other types of objects and those work perfectly. Here's the code that loads the fonts:

        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));
        }
    }

The error it gives is: "Error loading "Content\fonts\ammoFont.xnb". File not found." even though the file is CLEARLY there considering it would have to be in the directory to be added to the filePaths array as a string. I've even checked the folder and it is there. Here is the full error:

Microsoft.Xna.Framework.Content.ContentLoadException was unhandled
Message=Error loading "Content\fonts\ammoFont.xnb". File not found.
Source=Microsoft.Xna.Framework StackTrace: at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject) at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName) at OfUnknownOrigin.FileFactory.LoadFonts(ContentManager content) in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\FileFactory.cs:line 38 at WindowsGame1.UnknownOrigin.LoadContent() in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs:line 110 at Microsoft.Xna.Framework.Game.Initialize() at WindowsGame1.UnknownOrigin.Initialize() in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs:line 102 at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() at WindowsGame1.Program.Main(String[] args) in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Program.cs:line 15 InnerException: System.IO.FileNotFoundException Message=Error loading "Content\Content\fonts\ammoFont.xnb.xnb". File not found. Source=Microsoft.Xna.Framework StackTrace: at Microsoft.Xna.Framework.TitleContainer.OpenStream(String name) at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) InnerException:

Answer: Change this code:

Fonts.Add(key, content.Load<SpriteFont>(s));

to this:

Fonts.Add(key, content.Load<SpriteFont>("fonts\\" + key));
役に立ちましたか?

解決

From the exception message, it looks like the string you are calling it with is wrong. Content is in there twice, and the extension is there twice:

Error loading "Content\Content\fonts\ammoFont.xnb.xnb"

You didnt post the code where you initialize the array, but if you have them in the definition, remove them.

他のヒント

Game content paths must be relative to your Content.RootFolder ("Content\" by default) and must not contain file extension (so avoid duplicate file names, even if the extensions are different).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top