none
260バイトを超えているパスのディレクトリ内のファイル情報取得について RRS feed

  • 質問

  • あるディレクトリ内にあるファイルが、260バイトを超えるパスになっていて
    そのファイルの情報が取得できません。
    ファイルはNTFSのファイルサーバーです。

    開発環境:Windows XP / Visual Basic 2008 / .Net Freamwork 2.0

    下記のことを試しましたが、ダメでした。

     1、 DirectoryInfoを利用してファイル情報を取得する

        Dim DirInfo As DirectoryInfo
        
        DirInfo = New DirectoryInfo(260バイト超えているパス)

        Try

          For Each FileInfo In DirInfo.GetFiles

            'ファイル情報を取得
            FileName = FileInfo.Name
                FileSize = FileInfo.Length
                FileExt = FileInfo.Extension

          Next

        Catch FNFX As FileNotFoundExteption
              'エラー処理

        End Try

     2、 FileSystemObjectを利用してファイル情報を取得する

        Dim FSO As New FileSystemObject
            Dim Folder As Scripting.Folder

        Folder = FSO.GetFolder(260バイトを超えるパス)

        For Each File In Folder.Files

         'ファイル情報を取得
         FileName = File.Name
         FileSize = File.Size

        Next

        FSO = Nothing

    他にファイル情報を取得する方法はありませんか?

    よろしくお願いします。

    2009年5月28日 5:06

回答

  • 検討した結果、それほど260文字を超えるものがなかったので
    ユーザーに変更してもらうことにしました。

    260文字以上のパスが未サポートなので.NET Frameworkの今後に期待します。

    ありがとうございました。
    2009年6月4日 8:39

すべての返信

  • 以下のKBの原因4と同じものだと思います。
    いずれかの方法で、解決するのが良いようです。
    http://support.microsoft.com/default.aspx?scid=kb;ja;320081
    2009年5月28日 6:06
  • GX999さん

    ありがとうございます。

    原因4でのお試しですが、
     解決方法1:DirInfo = New DirectoryInfo(パスを短くした)
             Folder = FSO.GetFolder(パスを短くした)
            どちらも結果はエラーです。
     解決方法2:他のユーザーのものですので勝手にフォルダ名や移動はできません。
     解決方法3:他のユーザーのもにですのでドライブをマップするのは無駄かと。
     解決方法4:他のユーザーのものですので勝手に共有できません。
     解決方法5:CreateFile API 試していませんが、価値はありそうです。

    解決方法5で解決しなかったら、手段はなさそうですか?

    2009年5月28日 8:07
  • .NET Frameworkでは未サポートだそうです。過去ログにありました。(520byteではなく260文字であってます)
    http://social.msdn.microsoft.com/Forums/ja-JP/vsfeedbackja/thread/b75c900f-a2cd-427d-bcff-66e294d2cda4
    2009年5月28日 9:46
  • 単なる思い付きですが、1回で位置付けるのでなく、ディレクトリ階層を辿って行ってもダメ?

    2009年5月30日 7:50
  • 検討した結果、それほど260文字を超えるものがなかったので
    ユーザーに変更してもらうことにしました。

    260文字以上のパスが未サポートなので.NET Frameworkの今後に期待します。

    ありがとうございました。
    2009年6月4日 8:39