1

.NET API for Windows Store Appsでは、PathクラスにGetFullPathメソッドがありません。ただし、パスを正規化する必要があります。これは、GetFullPathを使用すると簡単でした。パスを正規化する別のメソッドまたは外部コードを知っている人はいますか?私がそれで意味するのは、例えば:

  • パスがドライブで始まらない場合は、アプリケーションのパスを追加します
  • ..\と。\を正しく処理する

GetFullPathは非常に複雑で、機能を模倣するのは簡単ではありません。

4

2 に答える 2

3

私が理解している限り、WinRTでは、パッケージのインストール場所または「既知の」フォルダーを使用します。

  1. Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(fileName)

  2. KnowFolders.DocumentsLibrary.GetFileAsync(fileName)

于 2012-09-28T06:42:41.593 に答える
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;
}
于 2012-10-06T10:52:20.857 に答える