- - PR -
長いパスの対応方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-15 09:19
VisualStudio2005 でC#を使用しています。
FileInfoクラスのCopyTOメソッド等で、 扱うパスが長い場合に 例外PathTooLongExceptionが発生してしまいます。 ターゲットのプラットフォームはWindowsXP + NTFSのみに限定しているので システム上はより長いパスが扱えます。 .NET Framework の制限に縛られずに、より長いパスを扱える方法がありましたら 教えてください。 過去のスレッドで \\?\ を付けると回避できるらしいご回答があり試しましたが 正常なパスと認識されないようです。 (@"c:\test\t.txt" を @"\\?\c:\test\t.txt"に変えるとArgumentExceptionが発生します。) | ||||||||
|
投稿日時: 2007-05-15 09:28
と書かれておりますね。
.NET Framework の制限? 全体的な回避をしたいのであれば GetShortPathName 関数を利用した方が良いかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-05-16 06:19
じゃんぬさん
いや、できる"はず"ですよ。
"//[hostname]/C$/test/t.txt" ならいけるんだろうな。。。 (スラッシュの代わりにバック スラッシュを使用) _________________ | ||||||||
|
投稿日時: 2007-05-16 22:51
扱うのが UNC とかそういうことでは?UNCの場合には、
"\\?\UNC\<server>\<share>" Naming a File _________________ | ||||||||
|
投稿日時: 2007-05-17 21:52
"//servername/shareddirectory/..." は 「UNC パス名」
"//?/c:¥file-path¥..." は、「Long-UNC パス名」 別物でした。失礼しました。 参考: → http://en.wikipedia.org/wiki/Path_(computing)#Universal_Naming_Convention で、UNC 形式でも、260 文字未満という制限を受けます。 そして、Long-UNC 形式に対応しているものと、していないものがあると。しているものは、ほとんど無い、ようです。 _________________ | ||||||||
|
投稿日時: 2007-05-18 02:48
あ、ほんとだ。できないですね。.NET だと。
しかし、これひどいなぁ。。。 COM の Scripting.FileSystemObject ですら対応しているのにね。 P/Invoke 使って、Win32 呼び出してやればいいんじゃない? ちょっと情報を漁っていたら reference の間違い発見。
おいおい。って英語も見たらこちらからしてすでにおかしい。。。 _________________ |
1