#c# #.net #bitmap #discord.net
Вопрос:
Я решил позволить своему боту 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
Если я отлаживаю его в VS на своем домашнем компьютере с Windows, я не получаю эту ошибку, и она работает нормально.
Я проверил каждый параметр, и каждый параметр должен быть в порядке.
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");
Только первая строка выдает ошибку, и да, файл существует.
Спасибо!
Комментарии:
1. Используйте / вместо в пути
2. Спасибо! Теперь это работает просто отлично!
3. рад это слышать
Ответ №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);