2010-08-11 17 views
7

Üzerinde 100'den fazla dosya bulunan bazı klasörler var. Ancak tüm dosya ve klasör adları yanlış kodlama adlarıyla (UTF-> ANSI) hatalı. Bunu finxing fakat FindFirst 255 sembollerin daha uzun adları ile klasörleri arama yapamazsınızUzun (> 255) dosya adlarını bulun

"C:\...\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\Госдача-Лечебни корпус\вертолетка\Госдача-Лечебни корпус\..." 

Düzenli fonksiyon Utf8ToAnsi.

Yalnızca 70/100 dosya yakaladım. Bilmen, ve en derin birine

cevap

13

FindFirst Win32 API işlevini FindFirstFile sarar ve size \\?\C:\Folder\Folder\* gibi içinde geçiyoruz yoluna \\?\ prepend eğer fonksiyonun Unicode sürümü uzun 32767 karakter yolları arama yapabilirsiniz.

Delphi 2009 ve daha yeni Unicode işlevlerini sizin için aradığınızdan, FindFirst'ü ve orada birlikte kullanabilirsiniz. Delphi 2007 ve öncesi için (ANSI sürümleri), Windows.pas'dan FindFirstFile/FindNextFile/FindClose'u doğrudan aramanız gerekir. Daha fazla bilgi için platform SDK'sının Naming a file bölümüne bakın.

Not: \\?\ öğesinin kullanılmasının çeşitli yol işleme bitlerini devre dışı bıraktığını unutmayın, bu nedenle "." Olmadan tam olarak nitelenmiş bir yol olduğundan emin olun. veya '..' girdileri. Dosya akışlarını açmak, yeniden adlandırmak veya dosyaları daha uzun yollarla kopyalamak için aynı numarayı kullanabilirsiniz.

Kabuk (Explorer) bunu desteklemiyor, bu nedenle SHFileOperation (geri dönüşüm kutusuna silmek için) veya ShellExecute gibi şeyler için bunları en fazla MAX_PATH karakterle sınırlamanız gerekir. Çoğu durumda, uzun olanları yerine DOS 8.3 adlarını geçirerek bu sorunu giderebilirsiniz. FindFirst'ün TSearchRec kısa adlarını göstermez, ancak FindFirstFile'ın TWin32FindData yapısında cAlternateFileName bulunur.

0

Değişim geçerli dizin (ChDir) daha sonra FindFirst veya FindFirstFile bir göreli yolu geçmektedir.

Bu dosya adındaki hiçbir yol bileşeni MAX_PATH karakterden uzun değil, bu nedenle dizinlere doğru bir adımda çalışabilmeniz gerekir.

Bir işlem, tüm iş parçacıkları tarafından paylaşılan yalnızca bir geçerli dizine sahip olduğundan, çok iş parçacıklı programların geçerli dizindeki değişikliklere duyarlı olabileceğine dikkat edin.

İlgili konular