Soru şu ki, sınırlama hala neden var. Elbette modern Windows, MAX_PATH
daha uzun yollara izin vermek için tarafını artırabilir . Sınırlama neden kaldırılmadı?
- Kaldırılmamasının nedeni, Windows'un asla değişmeyeceğine söz vermesidir.
API sözleşmesi aracılığıyla, Windows tüm uygulamalara standart dosya API'lerinin 260
karakterlerden daha uzun bir yol döndürmeyeceğini garanti etmiştir .
Aşağıdaki doğru kodu göz önünde bulundurun :
WIN32_FIND_DATA findData;
FindFirstFile("C:\Contoso\*", ref findData);
Windows, programıma yapımı dolduracağını garanti etti WIN32_FIND_DATA
:
WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
//...
TCHAR cFileName[MAX_PATH];
//..
}
Uygulamam sabitin değerini açıklamadı MAX_PATH
, Windows API yaptı. Uygulamam bu tanımlı değeri kullandı.
Yapım doğru bir şekilde tanımlandı ve yalnızca 592
toplam bayt ayırdı . Bu, yalnızca 260
karakterlerden daha az bir dosya adı alabildiğim anlamına gelir . Windows , uygulamamı doğru yazsaydım, uygulamamın gelecekte de çalışmaya devam edeceğine söz verdi .
Windows 260
karakterlerden daha uzun dosya adlarına izin verseydi, mevcut uygulamam (doğru API'yi doğru kullanan) başarısız olur.
Microsoft'un MAX_PATH
sabiti değiştirmesini isteyen herkes için , öncelikle mevcut uygulamanın başarısız olmadığından emin olmaları gerekir. Örneğin, hala sahip ve Windows 3.11 üzerinde çalıştırmak için yazılmış bir Windows uygulaması kullanın. Hala 64-bit Windows 10 üzerinde çalışıyor.
Microsoft , 32.768 yol adının tamamını kullanmak için bir yol oluşturdu; ancak bunu yapmak için yeni bir API sözleşmesi oluşturmaları gerekiyordu. Birincisi, dosyaları numaralandırmak için Shell API'sini kullanmalısınız (tüm dosyalar bir sabit sürücüde veya ağ paylaşımında bulunmadığından).
Ancak mevcut kullanıcı uygulamalarını da kırmamak zorundalar. Uygulamaların büyük çoğunluğu do not dosya çalışmaları için kabuk API kullanmak. Herkes sadece arar FindFirstFile
/ FindNextFile
ve bir gün arar.