Я делаю загрузчик изображений, который должен иметь возможность называть загруженный файл тегами. Однако иногда тегов слишком много, и я получаю исключение, потому что имя файла слишком длинное.
Путь к файлу: мой путь .exe + ./out/ каталог + теги + расширение
Мне нужен фрагмент кода, который позволил бы мне обрезать строку имени файла, если его полный путь превышает максимальную длину, и сохранить расширение.
У меня уже есть код, но он не работает должным образом, и я не не думаю, что он достаточно чистый.
string Truncate(string value, int maxChars)
{
return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
}
private async void downloadImage(string url, string tags, string rating)
{
string fullpath = "./out/" + rating + tags + ExtFromURL(url);
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
fullpath = r.Replace(fullpath, "");
string shortPath = Path.GetFullPath("./out/" + rating + ExtFromURL(url));
string extension = fullpath.Substring(fullpath.Length - 5);
if (fullpath.Length > 259)
fullpath = Truncate(fullpath, 259 - shortPath.Length - 4);
try
{
using (WebClient wc = new WebClient())
{
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; " +
"Windows NT 5.2; .NET CLR 1.0.3705;)");
await wc.DownloadFileTaskAsync(new System.Uri(url), fullpath + extension);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}