【发布时间】:2020-09-14 10:18:30
【问题描述】:
我正在制作一个图像下载器,它应该能够用标签命名下载的文件。但是,有时标签太多,我会因为文件名太长而出现异常。
文件路径为:我的.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());
}
}
【问题讨论】:
-
吹毛求疵,但调用者函数不应该处理您添加的椭圆字符串的大小(“...”),因为这是调用者不知道的事情。如果你改变椭圆,你会通过所有调用将 -4 更改为 -8 吗?
private string Truncate(string input, int lenght, string ellipse = "...") => (input.Length < lenght ? input : input.Substring(0, lenght - ellipse.Length) + ellipse);