如何解决 System.IO.FileNotFoundException?
Posted
技术标签:
【中文标题】如何解决 System.IO.FileNotFoundException?【英文标题】:How do I solve the System.IO.FileNotFoundException? 【发布时间】:2021-11-16 16:03:18 【问题描述】:我正在尝试在 MonoGame 中加载图片(没有 Content.Load),但是当我尝试启动项目时遇到 System.IO.FileNotFoundException,我希望有人能告诉我我做错了什么。
错误消息: System.IO.FileNotFoundException:'找不到文件'G:\Min enhet\C#\FirstMonoGameProject\bin\Debug\netcoreapp3.1\Content\Graphic\CoolBox'。 '
我得到错误的代码
public Texture2D LoadTexture()
string fullPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
+ "/Content/Graphic/" + "CoolBox";
using (FileStream fileStream = File.Open(fullPath, FileMode.Open))
Texture2D myTexture2D = Texture2D.FromStream(EntityManager.graphicsDevice, fileStream);
return myTexture2D;
我调用该方法的附加代码(均来自 game1)
protected override void LoadContent()
spriteBatch = new SpriteBatch(GraphicsDevice);
coolBox.LoadTexture();
protected override void Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(coolBox.LoadTexture(), new Rectangle(0, 0, 280, 210), Color.White);
spriteBatch.End();
base.Draw(gameTime);
【问题讨论】:
显然路径和/或文件的名称是错误的。文件的扩展名不是 .gif、.png、.jpg 吗? 只需检查您的 Windows 机器上的文件路径是否存在。这里还有一个专业提示:不要在文件路径中使用特殊字符。系统允许这样做,但这可能会导致麻烦。将“C#”重命名为“CSharp”或任何你喜欢的名称。 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 在 Draw 中调用CoolBox.LoadTexture()
将在每次调用 draw 时从磁盘重新加载纹理。这将增加绘图方法的阻塞时间。从方法返回引用不是很好,但可以,每次调用都从磁盘加载不是。不可能在 gpu 上缓存纹理。
【参考方案1】:
首先我会添加检查文件是否存在使用
File.Exists(String)
方法。
我还发现使用Path.Combine()
方法来正确创建路径而不是手动连接字符串很有帮助。
【讨论】:
【参考方案2】:System.IO.FileNotFoundException 当您使用的路径错误时出现,这意味着该文件不存在。 您的问题出在变量字符串 fullpath 上,路径错误。
首先在您的计算机上(windows 搜索:windows+s)通过复制完整路径来检查文件是否存在。 无论如何,为了防止此异常,如果文件不存在,您可以使用 try catch 块显示一条消息。 其他解决方案可以使用 File.Exists(path) ,这样你就不会抛出异常。
【讨论】:
以上是关于如何解决 System.IO.FileNotFoundException?的主要内容,如果未能解决你的问题,请参考以下文章