c#中是否有任何函数可以使文件路径闪烁?
输入:"c:\ users\Windows\Downloaded Program Files\Folder\Inside\example\file.txt"
输出:"c:\ users\...\example\file.txt"
这对我来说看起来不那么人性化.无论如何,我认为没有这样的功能.将它拆分在\字符上,只保留前两个插槽和最后两个插槽即可.
这样的东西,虽然代码不是很优雅
string[] splits = path.Split('\\');
Console.WriteLine( splits[0] + "\\" + splits[1] + "\\...\\" + splits[splits.Length - 2] + "\\" + splits[splits.Length - 1]);
Run Code Online (Sandbox Code Playgroud)
Jeff Atwood在他的博客上发布了一个解决方案,这里是:
[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
static extern bool PathCompactPathEx([Out] StringBuilder pszOut, string szPath, int cchMax, int dwFlags);
static string PathShortener(string path, int length)
{
StringBuilder sb = new StringBuilder();
PathCompactPathEx(sb, path, length, 0);
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
它使用非托管功能PathCompactPathEx来实现您想要的。
如果需要,请根据路径字符串的长度插入省略号,然后使用以下代码:
TextRenderer.MeasureText(path, Font,
new System.Drawing.Size(Width, 0),
TextFormatFlags.PathEllipsis | TextFormatFlags.ModifyString);
Run Code Online (Sandbox Code Playgroud)
它将path就地修改。
编辑:请小心使用此方法。它打破了规则,称 .NET 中的字符串是不可变的。事实上,该MeasureText方法的第一个参数不是ref参数,这意味着不能返回新的字符串。相反,现有字符串会被更改。处理使用以下命令创建的副本时要小心
string temp = String.Copy(path);
Run Code Online (Sandbox Code Playgroud)
小智 5
纳斯达丁的答案几乎是正确的。在您的情况下,只需指定StringBuilder的大小即可:
[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
static extern bool PathCompactPathEx(
[Out] StringBuilder pszOut,
string szPath,
int cchMax,
int dwFlags);
static string PathShortener(string path, int length)
{
StringBuilder sb = new StringBuilder(length + 1);
PathCompactPathEx(sb, path, length, 0);
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3395 次 |
| 最近记录: |