在用于Windows应用商店应用的.NET API中,Path类没有GetFullPath方法。我需要规范化路径,这很容易使用GetFullPath。有没有人知道规范化路径的另一种方法或外部代码?我的意思是例如:
GetFullPath非常复杂,模仿功能并不容易。
答案 0 :(得分:3)
据我所知,在WinRT中,您宁愿使用软件包的安装位置或“已知”文件夹:
Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(文件名)
KnownFolders.DocumentsLibrary.GetFileAsync(文件名)
答案 1 :(得分:1)
我没有找到GetFullPath的替代品,但开发了一个处理父目录令牌(.. \)的方法,如GetFullPath。
这是:
public static string NormalizePath(string path)
{
if (String.IsNullOrEmpty(path) == false)
{
// Correct multiple backslashes
path = Regex.Replace(path, @"\\+", @"\");
// Correct parent directory tokens with too many points in it
path = Regex.Replace(path, @"\\\.\.+", @"\..");
// Split the path into tokens
List<string> resultingPathTokens = new List<string>();
var pathTokens = path.Split('\\');
// Iterate through the tokens to process parent directory tokens
foreach (var pathToken in pathTokens)
{
if (pathToken == "..")
{
if (resultingPathTokens.Count > 1)
{
resultingPathTokens.RemoveAt(resultingPathTokens.Count - 1);
}
}
else
{
resultingPathTokens.Add(pathToken);
}
}
// Get the resulting path
string resultingPath = String.Join("\\", resultingPathTokens);
// Check if the path contains only two chars with a colon as the second
if (resultingPath.Length == 2 && resultingPath[1] == ':')
{
// Add a backslash in this case
resultingPath += "\\";
}
return resultingPath;
}
return path;
}