在WinRT中替换Path.GetFullPath?

时间:2012-09-27 18:55:03

标签: windows-runtime windows-store-apps winrt-xaml

在用于Windows应用商店应用的.NET API中,Path类没有GetFullPath方法。我需要规范化路径,这很容易使用GetFullPath。有没有人知道规范化路径的另一种方法或外部代码?我的意思是例如:

  • 如果路径不以驱动器开头,则添加应用程序的路径
  • 处理.. \和。\正确

GetFullPath非常复杂,模仿功能并不容易。

2 个答案:

答案 0 :(得分:3)

据我所知,在WinRT中,您宁愿使用软件包的安装位置或“已知”文件夹:

  1. Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(文件名)

  2. 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;
}