2013-06-01 11 views
10

パスが255文字を超えると、DelphiアプリケーションでRobocopyを使用してコピーされたファイルがあるかどうかを確認する必要があります。 私はいつもの "If FileExists(MyFile)then ..."を試しましたが、ファイルがあっても常に "false"を返します。デルファイ:ファイルが存在するかどうかをチェックする方法(255文字以上のパス)

また、ファイルの日付を取得しようとしましたが、空の日付と見なすことができる1899/12/30になります。

ファイル検索でも何も返されません。

答えて

9

拡張名のパス解析を有効にするには、ファイル名の先頭に\\?\を付けます。たとえば、次のように記述します。

if FileExists('\\?\'+FileName) then 
    .... 

これは、Win32 API関数のUnicodeバージョンを呼び出す場合にのみ有効です。したがって、Unicode Delphiを使用している場合、これは仕事をします。それ以外の場合は、UnicodeバージョンのAPI関数を呼び出す独自のバージョンのFileExistsをロールバックする必要があります。

これらの問題については、MSDNのNaming Files, Paths, and Namespacesを参照してください。

+0

ご返信ありがとうございます。このソリューションは、e:¥myfilepathなどのローカルパスではうまくいきますが、「If FileExists( '\\?\ UNC \' + MyFile)」の場合でもUNCパスが残っています。 – Fab

+0

ここでUNCパスが正常に動作します。私の答えはあなたが必要なものだと確信しています。他の何かが間違っているでしょう。 '\\?\'接頭辞があると、260の制限をエスケープしました。 –

+3

@Fab: 'MyFile'に標準のUNCパスが含まれている場合、' '\\?\ UNC \' 'プレフィックスの前に' '\\ ''を取り除かなければなりません。 IOW、 '' \\ server \ path''はあなたのコードが現在やっているように '' \\?\ UNC \\\ server \ path''ではなく '' \\?\ UNC \ server \ path''になる必要があります。 –

関連する問題