【问题标题】:Why does the path parameter for Bitmap throw "ArgumentException: Parameter is not valid" on Ubuntu Server 20.04?为什么 Bitmap 的路径参数在 Ubuntu Server 20.04 上会抛出“ArgumentException:参数无效”?
【发布时间】:2021-11-29 04:28:39
【问题描述】:

我决定让我的 Discord 机器人在我的新 Ubuntu 20.04 家庭服务器上运行。

机器人确实在服务器上运行,但是当我尝试从路径创建 Bitmap 时出现以下错误:

System.ArgumentException: Parameter is not valid.
   at System.Drawing.SafeNativeMethods.Gdip.CheckStatus(Int32 status)
   at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)
   at Aurelia.ImageProcessor.ImageBuilder(String filename, String idolname, String group, String rarity, Int32 rar, String id, String pathDefiner) in /home/aurelia/discordBots/Aurelia/AureliaBot/Aurelia/ImageProcessor.cs:line 21

如果我在家用 Windows PC 上的 VS 中对其进行调试,我不会收到此错误并且它工作正常。

我已经检查了每个参数,每个参数都应该没问题。

Bitmap cardTemp = new Bitmap($"assets\\groups\\{group}\\{idolname}\\{filename}");
Bitmap card = new Bitmap(cardTemp, 800, 1200);
Bitmap rareFrameTemp = new Bitmap($"assets\\frames\\{rarity}Frame.png");

只有第一行抛出错误,是的,文件存在。 谢谢!

【问题讨论】:

  • 在路径中使用 / 代替 \
  • 谢谢!现在它工作得很好!
  • 很高兴听到这个消息

标签: c# .net bitmap discord.net


【解决方案1】:

问题是您的路径虽然适用于 Windows,但不适用于基于 Unix 的系统,因为它们使用正斜杠 - / - 而不是反斜杠 \ 作为目录分隔符。

将Path.Combine 用于跨平台解决方案。

它将使用Path.DirectorySeparatorChar,它将提供特定于平台的字符:

var cardTempPath = Path.Combine("assets", "groups", group, idolname, filename);
var rareFrameTemp = Path.Combine("assets", "frames", $"{rarity}Frame.png");

Bitmap cardTemp = new Bitmap(cardTempPath);
Bitmap card = new Bitmap(cardTemp, 800, 1200);
Bitmap rareFrameTemp = new Bitmap(rareFrameTemp);

【讨论】:

    猜你喜欢
    • 2012-05-01
    • 2019-02-26
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多