2016-07-22 18 views
0

FileSystemWatcherオブジェクトを使用してローカルフォルダの変更を追跡するプログラムがあります。 このウォッチャーは、DOSパス( "/ Hello/How/Are/You"は "/ HE〜1"のようになります)で私にイベントを与えてしまう環境や状況/ HO〜1/AR〜1/YO〜1 ")。DOSパスを通常のパス(.net)に変換する方法

私が探しているのは、この経路を強制的に完全かつ正常な状態に戻す方法です。

少なくとも、そのパスは実際にはDOSパスであると私に伝えることができるので、別の方法でエントリを処理できます。

EDIT:長いパス(+ 260文字)で作業する必要があるため、Path.GetFullPath(sShortPath)はここでは機能しません。

+0

あなたは 'Path.GetFullPath'を試しましたか? –

答えて

2

Path.GetFullPath(@ "/ HE〜1/AR〜1/YO〜1")は、必要な処理を行う必要があります。あなたは一度だけファイルにアクセスしたい場合は

+0

できるだけ早くそれをテストしよう!あなたの素早い答えをありがとう! – Matthieu

+0

私はそれが長い道で働くために必要なので、実際それは私のために働いていませんでした。私の解決策を私の答えを参照してください!そして、はい、私は長いパスの精度で私のポストを更新します;) – Matthieu

1

最善の方法は、あなたが探しているものによって異なりますが、そこユーザーまたはストアに表示したいならば、8バイトのファイル名は、内部ファイル参照

のために動作します2オプション

  1. Pathは、あなたがパスに fullPath = Path.GetFullPath(path1);

  2. FileInfoと0を操作するために必要なツールのほとんどが含まれていますこれらの2つのクラスは、ファイルやディレクトリ情報への永続的なアクセスを提供し、彼らは任意の有効なパスを作成することができますが、両方のフルパス

+0

私は、8バイトのパス内の番号は時間が経つにつれて変更することができます(これはバージョン固有のこともあります)ので、パスは内部ファイル参照としても長期間保存しないでください。 –

0

他の人が言ったように、Path.GetFullPathへのアクセスを提供する(フルネームプロパティを持っていますsShortPath)は非常に長いパス(+260文字)では使用しないとうまく動作します。

ここには私のために働いたlinkがあります。

kernel32.dllのGetLongPathNameは私とうまく動作しましたが、長いパスで動作させるために255 StringBuilderの制限を高い値に変更するだけでした。

関連する問題