- - PR -
長いパス名を省略型にできますか
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-04-03 12:35
TKです。よろしくお願い致します。
FileInfoクラスを利用して、以下のようにファイルの存在をチェックしていますが、 ファイルパスが260文字以上であると、PathTooLongExceptionというわかりやすい Exceptionがでてしまいます。 そこで、Short Nameを利用したらどうかと、考えましたが .Long PathからShort Pathへの変換方法がわかりません。 どなたか、お分かりの方は教えてください。 よろしくお願い致します。 FileInfo info = new FileInfo(@"ファイルパス") if(info.Exists==false) ---以下略--- | ||||
|
投稿日時: 2003-04-03 14:08
どうやら、System.IO.File.Existsならイケるみたいです。パスを\\?\...の形式にする必要がありますが。
bool b = File.Exists(@"\\?\C\WINDOWS\LongLongSoLong.FILE"); | ||||
|
投稿日時: 2003-04-03 14:12
クロスプラットフォームのランタイムを使う限り、小さいほうに
あわせられるのでは? しかも MAX_PATH はコンパイルタイムの 値とか。 MAX_PATH http://risky-safety.org/~zinnia/doc/maxpath.html この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。 http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_findfirstfile.htm | ||||
|
投稿日時: 2003-04-03 15:27
Windowsベースなら、結局どんなことをしても、OSレベルではじかれるような?
UNCパスで他のコンピュータを参照する場合、他のコンピュータに到達するまでの名称があるので一見制限を受けないように見えますが、実はOSにそういう制限があったのではないでしょうか。 そのほか、ルートドライブのファイル数の上限か、1ディレクトリ中のファイル数の上限とか(これってNTまで?)。 | ||||
|
投稿日時: 2003-04-03 17:34
NT系ならば、1つ1つの部分がMAX_PATHを超えていなければ、全体としてMAX_PATHを超えるパス名を指定してファイルを作ったり参照することが可能です。次のパス名はWindows XPで普通に利用できます。
L"\\\\?\\C:\\TEMP\\<200字程度のフォルダ名>\\<200字程度のファイル名>" | ||||
|
投稿日時: 2003-04-04 08:48
こんにちは。
えっと、これをエクスプローラなどから参照することはできるのでしょうか?プログラム上から作れても、そのプログラムでしか参照できなかったら意味がないですよね? 某CDをHDD経由でバックアップしたとき、JORIET準拠にしていましたが、「ファイル名が長すぎる」というエラーがでたんですね。で、そのCDを落としたHDD上のルートディレクトリ名を短くして、対応しました。そういうことがあったので、「結局MAX_PATHの制限を受けるのでは?」と思うのです。 #産婆やPCNFSでUNIX上のファイルを共有している環境だからかもしれない | ||||
|
投稿日時: 2003-04-04 10:46
>えっと、これをエクスプローラなどから参照することはできるのでしょうか?
少なくともWindows XPのNTFS上にあるこのファイルをエクスプローラで見ることはできます。他のOS、他のファイルシステムはわかりません。交換可能性が低いのは事実でしょう。 ただ元々のご質問を見る限り、そういうファイルがあることが前提になっているようですから、スレッドの意図と外れてはいないと思います。 |
1