Как обрезать имя файла, чтобы не превышал максимальный размер пути к файлу - PullRequest
0 голосов
/ 27 мая 2020

Я делаю загрузчик изображений, который должен иметь возможность называть загруженный файл тегами. Однако иногда тегов слишком много, и я получаю исключение, потому что имя файла слишком длинное.

Путь к файлу: мой путь .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());
            }
        }

1 Ответ

2 голосов
/ 27 мая 2020

Путь к файлу: my .exe путь + ./out/ directory + tags + extension

Нет разумного способа сделать это. Если вы не хотите, чтобы ваше имя файла становилось слишком длинным, просто не добавляйте к нему ничего. Но даже в этом случае это может быть слишком долго, потому что кто-то выбрал действительно очень длинный путь в качестве своего каталога для вывода.

Обычно такие каталоги находятся в профиле пользователя. Хотя это делает очень надежным местом для получения прав на запись, это также делает его чрезмерно допустимым, но полностью квалифицированный путь должен быть слишком длинным. Я столкнулся с проблемами длины, просто создавая резервные копии этих папок!

Это старый добрый Exogenous excetpions . Вы ничего не можете с этим поделать, кроме как поймать его и рассказать об этом пользователю. Пока пользователь может выбрать папку out - и, возможно, какие теги добавить - это не проблема, которую нужно исправить. собственно ручка. catch (Exception ex) следует избегать в производственном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...