22Aug
Windows'la yeterince uzun süre çalışıyorsanız, özellikle de uzun adlara sahip klasörler ve dosyalarla, tuhaf bir hata yaşarsınız: Windows, klasör yolunun veya dosya adının yeni bir hedefe taşınması veya silinmesi için çok uzun olduğunu bildirir..Anlaşma ne?
Hey Nasıl Yapılır Geek!
Geçen gün, bilgisayarımdaki bazı dosyaları yeniden düzenliyordum, bu tür şeyler klasörler oluşturuyordum. Sonra, bazı dosyaları bir klasöre taşırken, çıkan klasör yolunun çok uzun olacağını belirten bir ileti alıyorum. Kafam karışmıştı.DOS'tan beri her tek işletim sisteminin Long Filenames'i desteklediğini biliyorum, ancak Windows yolun çok uzun olduğunu iddia ediyor mu? Bu neden oluyor?
Saygılarımla,
Bay Dağıtılmış
Çalıştırmakta olduğunuz problem iki sistemin talihsiz bir kesişimidir, böyle durumlarda bir hata ortaya çıkarmaktadır. Hatanın nereden geldiğini anlamak için, Uzun Dosya Adları'nın( LFN) geçmişine ve Windows'a çözümlerle ilgili araştırma yapmadan önce onlarla etkileşim kurmamız gerekir.
Uzun Dosya Adları, Windows 95'te temel MS-DOS mimarisi aracılığıyla tanıtıldı. Yeni LFN sistemi, dosya ve dizin adlarının 255 karaktere kadar olmasına izin verdi. Bu, önceki dosya adı sisteminin hoş karşılandığı bir genişletmeydi, adı genellikle sekiz karakterle ve üç haneli bir uzantıyla sınırlı olduğu halde 8.3 dosya olarak adlandırıldı, ancak Kısa Dosya Adı( SFN) olarak da biliniyordu. Tahmin edebileceğiniz gibi, o zamanlar halen DOS tabanlı birçok uygulama vardı ve daha yeni LFN'leri ve eski SFN'leri birbirleriyle güzel oynatmaya çalışan birkaç baş ağrısı vardı.Tuhaf bir şekilde kesilmiş dosyalarla( abcdef ~ 1.txt gibi) eski bir disket veya CD-ROM'la rastladıysanız, bu dosya adı bazı SFN tarafından eski uygulamalarını kullanarak bazı daha uzun ve desteklenmeyen LFN( abcdefghijk gibi) tarafından kesilir. Txt).
Ancak, 1990'ların ortalarından çok uzaktayız ve Uzun Dosya adı şeyinin tamamı( çoğunlukla) sıkıştı.Son 10 yılda bir Windows sürümünü çalıştırıyorsanız, DOS / Windows 95 günlerinde çalıştık gibi dosya adı uzunluğu çakışmasına rastlamadınız demektir. Disk temizleme projenizle keşfettiğiniz gibi hala hıçkırıklıkla karşılaştığımızı söylediler. Ama neden? Windows'un Uzun Dosya Adı sistemi, bileşen başına 255 karaktere kadar klasör ve dosya adlarını destekliyorsa, hangi duvara giriyorsunuz? NTFS, 32,767 karakterden oluşan toplam bir yol uzunluğuna kadar bir klasör zincirleme ve dosya adını desteklediğinden NTFS'yi( modern Windows makinelerinin büyük çoğunluğunun kullandığı dosya sistemi) suçlayamayız. Bu, çoğu kullanıcıya ihtiyaç duyacağı tipik bir dizin yapısını aşıyor.
Her şeyin düştüğü yerde, Windows, LFN / NTFS sisteminin üstünde yığını olan yapay bir kısıtlamadır: MAX_PATH değişkeni. MAX_PATH değişkeni, Windows'daki eksiksiz bir dizin yapısının, sürücü harfi, iki nokta üst üste çizgi, ters eğik çizgi ve sonunda boş boşluk dahil olmak üzere toplam 260 karakteri aşamayacağını belirtir. Böylece, yalnızca potansiyel bir MAX_PATH 256 karakterden( ör. C: \ your-256 karakterli yol \ .
Bilgisayarınızı temizlerken ne oldu zaten uzun bir yol olan bir dizine sahip olduğunuzdan( ya klasör adları uzun, dosya adları uzun veya her ikisi de olduğu için) ve bir veya daha fazla klasör taşımaya çalıştığınızdabu dizinlerin uzun bir yolla başka bir dizine eklenmesiyle, yol adının toplam uzunluğu MAX_PATH değişkeni tarafından uygulanan 260 karakter sınırını aştı.
Şimdi, "Ah-hah! Sadece MAX_PATH değişkenini değiştireceğiz ve sorunu çözeceğiz! "Ne yazık ki, o kadar da basit değil. MAX_PATH değişkeni, yalnızca Windows'a sabit olarak kodlanmış değil, aynı zamanda onu değiştirmenin muazzam güçlüğünü atlatmış olsanız bile, o kadar çok şey kırmak zorunda kalırsınız ki buna değmezsiniz.Çok fazla uygulama, Windows'un uzun süredir belirlemiş olduğu yol değişkeni olmasını beklemektedir.Çok büyük bir karmaşa yaratmadan onu değiştirerek geçemeyiz.
Seni nereden buluyor? En basit çözüm yalnızca yol verilerini düzenlemektir.Örneğin, onları web'den kaydetmek için kullandığınız uygulamanın / uzantının, makalenin + başlığı olan bir dizin oluşturduğu kaydedilen makalelerden bir tonunuz varsa ve dosya adı tam başlığa sahipseMakale + Makale başlığına bakarsanız, tek bir kaydetme ile MAX_PATH değerini aşmak veya aşmak gerçekten basit olur. Bu muazzam klasör ve makale başlıklarını makul bir düzeye indirmek, sorunu düzeltmenin kolay bir yoludur.
Uzun bir yol olan çok sayıda dosyanız varsa ve hepsini düzenlemek istemiyorsanız( veya dosyasını Windows tarafından sınırlandırıldığında Windows'la başa çıkmak için çok uzun olan bir sürü eski dizinleri silmek istiyorsanız)MAX_PATH değişkeni), bir komut satırı çalışması var. Windows, MAX_PATH değişkeni tarafından kısıtlanmış olsa da, Windows mühendisleri kullanıcıların daha uzun yol adlarıyla uğraşması gereken durumların olacağını fark etti. Bu nedenle, Windows API, son derece uzun yollarla uğraşmak için bir işleve sahiptir.
Bu API'dan yararlanmak ve hantal klasörleriniz / dosya adlarınızda komut satırı araçlarını kullanabilmek için, yalnızca birkaç ek karakterle dizin adını eklemeniz yeterlidir.Örneğin, silmek istediğiniz( ancak denediğinizde yol uzunluğundan dolayı bir hata aldınız) büyük bir dizin yapısına sahipseniz, komutu şu şekilde değiştirebilirsiniz:
rmdir c: \ documents \ some-really-super-long-folder-name-scheme \
için:
rmdir \\? \ c: \ documents \ some-really-super-long-klasör-ad-scheme \
Anahtar, \\? \ bölümünün eklenmesidirdosya yolunun başlamasından önce;bu, Windows'a MAX_PATH değişkeninin dayattığı sınırlamaları gözardı etmesini ve doğrudan sağlanan( doğrudan daha uzun bir yolu destekleyebilecek) temel alınan dosya sistemince sağlanan / anlaşılan yol ile etkileşime girmesini sağlar. Her zamanki gibi, yanlış bırakılmayı düşündüğünüz dosyaları veya dizinleri yanlışlıkla silmemek için komut isteminde dikkatli olun.
Bu konuyla ilgili genellemeyi merak ediyorsanız, başlık altındaki olaylarla ilgili daha fazla bilgi için Microsoft Geliştirici Ağ kitaplığından, Dosyaları Adlandırma, Yollar ve Ad Alanları'ndan bu makaleye dikkat edin.
Bir teknoloji sorusu var mı[email protected] adresinden bize bir e-posta atın ve cevaplamak için elimizden geleni yapacağız.