- PR -

長いパス名を省略型にできますか

1
投稿者投稿内容
TK
常連さん
会議室デビュー日: 2002/08/13
投稿数: 42
投稿日時: 2003-04-03 12:35
TKです。よろしくお願い致します。
FileInfoクラスを利用して、以下のようにファイルの存在をチェックしていますが、

ファイルパスが260文字以上であると、PathTooLongExceptionというわかりやすい
Exceptionがでてしまいます。
そこで、Short Nameを利用したらどうかと、考えましたが
.Long PathからShort Pathへの変換方法がわかりません。

どなたか、お分かりの方は教えてください。
よろしくお願い致します。


FileInfo info = new FileInfo(@"ファイルパス")

if(info.Exists==false)
---以下略---
NothingButXMLInfoSet
ベテラン
会議室デビュー日: 2003/03/31
投稿数: 65
投稿日時: 2003-04-03 14:08
どうやら、System.IO.File.Existsならイケるみたいです。パスを\\?\...の形式にする必要がありますが。

bool b = File.Exists(@"\\?\C\WINDOWS\LongLongSoLong.FILE");
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-03 15:27
 Windowsベースなら、結局どんなことをしても、OSレベルではじかれるような?

 UNCパスで他のコンピュータを参照する場合、他のコンピュータに到達するまでの名称があるので一見制限を受けないように見えますが、実はOSにそういう制限があったのではないでしょうか。

 そのほか、ルートドライブのファイル数の上限か、1ディレクトリ中のファイル数の上限とか(これってNTまで?)。
NothingButXMLInfoSet
ベテラン
会議室デビュー日: 2003/03/31
投稿数: 65
投稿日時: 2003-04-03 17:34
NT系ならば、1つ1つの部分がMAX_PATHを超えていなければ、全体としてMAX_PATHを超えるパス名を指定してファイルを作ったり参照することが可能です。次のパス名はWindows XPで普通に利用できます。

L"\\\\?\\C:\\TEMP\\<200字程度のフォルダ名>\\<200字程度のファイル名>"
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-04 08:48
こんにちは。
引用:

NothingButXMLInfoSetさんの書き込み (2003-04-03 17:34) より:
NT系ならば、1つ1つの部分がMAX_PATHを超えていなければ、全体としてMAX_PATHを超えるパス名を指定してファイルを作ったり参照することが可能です。次のパス名はWindows XPで普通に利用できます。

L"\\?\C:\TEMP\<200字程度のフォルダ名>\<200字程度のファイル名>"



 えっと、これをエクスプローラなどから参照することはできるのでしょうか?プログラム上から作れても、そのプログラムでしか参照できなかったら意味がないですよね?


 某CDをHDD経由でバックアップしたとき、JORIET準拠にしていましたが、「ファイル名が長すぎる」というエラーがでたんですね。で、そのCDを落としたHDD上のルートディレクトリ名を短くして、対応しました。そういうことがあったので、「結局MAX_PATHの制限を受けるのでは?」と思うのです。

#産婆やPCNFSでUNIX上のファイルを共有している環境だからかもしれない
NothingButXMLInfoSet
ベテラン
会議室デビュー日: 2003/03/31
投稿数: 65
投稿日時: 2003-04-04 10:46
>えっと、これをエクスプローラなどから参照することはできるのでしょうか?

少なくともWindows XPのNTFS上にあるこのファイルをエクスプローラで見ることはできます。他のOS、他のファイルシステムはわかりません。交換可能性が低いのは事実でしょう。

ただ元々のご質問を見る限り、そういうファイルがあることが前提になっているようですから、スレッドの意図と外れてはいないと思います。
1

スキルアップ/キャリアアップ(JOB@IT)