Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, NTFS dosya sistemi birimindeki bir dosyayı veya klasörü neden silememe işlemi açıklanmaktadır. Ayrıca bu sorunu çözmek için yardım sağlar.
Özgün KB numarası: 320081
Not
NTFS, dahili olarak klasörleri özel bir dosya türü olarak ele alır. Bu nedenle, bu makaledeki sözcük dosyası bir dosyayı veya klasörü gösterir.
Neden 1: Dosya bir ACL kullanıyor
Dosya erişim denetim listesi (ACL) kullanıyorsa, dosyayı silemezsiniz. Bu sorunu çözmek için dosya üzerindeki izinleri değiştirin. İzinleri değiştirmek için dosyaların sahipliğini almanız gerekebilir.
Yöneticiler, dosyaya açıkça izin verilmemiş olsa bile herhangi bir dosyanın sahipliğini alma konusunda örtük bir beceriye sahiptir. Dosya sahipleri, dosya üzerinde açıkça herhangi bir izin verilmese bile dosya izinlerini değiştirme konusunda örtük bir beceriye sahiptir. Bu nedenle, bir dosyanın sahipliğini almanız, kendinize dosyayı silme izinleri vermeniz ve ardından dosyayı silmeniz gerekebilir.
Dosya kurallı olmayan bir ACL'ye sahip olduğundan, belirli güvenlik araçlarını kullanarak izinleri görüntüleyemez veya değiştiremezsiniz
Bu sorunu geçici olarak çözmek için başka bir araç kullanın (örneğin, daha sonraki bir Cacls.exe derlemesi).
Bir ACL'deki Erişim Denetimi Girdileri (ACL' ler), türlerine bağlı olarak belirli bir tercih edilen diziye sahiptir. Örneğin, erişimi reddeden ACL'ler genellikle erişim veren ACL'ler öncesinde gelir. Ancak, hiçbir şey bir programın herhangi bir rastgele sırada ACL'leri olan bir ACL yazmasını engellemez. Windows'un önceki bazı sürümlerinde, Windows bu kurallı olmayan ACL'leri okumaya çalıştığında sorunlar oluştu. Bazen Microsoft Windows Gezgini grafik güvenlik düzenleyicisini kullanarak bu ACL'leri doğru şekilde değiştiremezsiniz. Bu sorun Windows'un sonraki sürümlerinde düzeltilmiştir. Bu sorunla karşılaşırsanız Cacls.exe en son sürümünü kullanın. Bir ACL'yi yerinde görüntüleyemeseniz veya düzenleyemezseniz bile, dosyaya erişmek için yeni bir ACL yazabilirsiniz.
Neden 2: Dosya kullanılıyor
Dosya kullanılıyorsa dosyayı silemezsiniz. Bu sorunu çözmek için açık tanıtıcıya sahip işlemi belirleyin ve ardından bu işlemi kapatın.
Dosyanın nasıl açıldığına bağlı olarak, kullanımda olan bir dosyayı silemeyebilirsiniz. Örneğin, dosya paylaşılan erişim yerine özel erişim için açıktır. Dosyalara açık tanıtıcıları olan işlemleri istediğiniz zaman belirlemek için çeşitli araçlar kullanabilirsiniz.
Bu sorunun belirtileri farklılık gösterebilir. Sil komutunu kullanarak bir dosyayı silebilirsiniz. Ancak, dosya açık olan işlem dosyayı serbest bırakana kadar dosya silinmez. Ayrıca, silinmeyi bekleyen bir dosyanın Güvenlik iletişim kutusuna erişemeyebilirsiniz. Bu sorunu çözmek için açık tanıtıcıya sahip işlemi belirleyin ve ardından bu işlemi kapatın.
Neden 3: Dosya sistemi bozulması dosyaya erişimi engelliyor
Dosya sistemi bozuksa dosyayı silemezsiniz. Bu sorunu çözmek için disk biriminde Chkdsk yardımcı programını çalıştırarak hataları düzeltin.
Aşağıdaki nedenler dosya sistemini bozabilir ve dosyaları sorunlu bir duruma sokabilir:
- Diskte hatalı kesimler
- Diğer hatalı donanım
- Yazılım hataları
Tipik işlemler çeşitli şekillerde başarısız olabilir. Dosya sistemi bozulma algıladığında olay günlüğüne bir olay kaydeder ve genellikle Chkdsk'yi çalıştırmanızı isteyen bir ileti alırsınız. Bozulmanın niteliğine bağlı olarak, Chkdsk dosya verilerini kurtarabilir veya kurtaramayabilir. Ancak Chkdsk, dosya sistemini dahili olarak tutarlı bir duruma döndürür.
Neden 4: Dosyalar, MAX_PATH karakterden daha derin yollarda bulunur
Dosya yoluyla ilgili sorunlar varsa dosyayı açamaz, düzenleyemez veya silemezsiniz.
Çözüm 1: Dosyaya erişmek için otomatik olarak oluşturulan 8.3 adını kullanın
Bu sorunu çözmek için dosyaya erişmek için otomatik olarak oluşturulan 8.3 adını kullanmak isteyebilirsiniz. Klasör adları çok uzun olduğundan yol derinse bu çözüm en kolay çözüm olabilir. 8.3 yolu da çok uzunsa veya birimde 8.3 adı devre dışı bırakıldıysa, Çözüm 2'ye gidin. NTFS birimlerinde 8.3 dosya adlarını devre dışı bırakma hakkında daha fazla bilgi için bkz . NTFS bölümlerinde 8.3 ad oluşturmayı devre dışı bırakma.
Çözüm 2: Derin klasörü yeniden adlandırma veya taşıma
Klasörü yeniden adlandırarak daha derin olan hedef dosyaların artık mevcut olmamasını MAX_PATH
sağlayın. Bunu yaparsanız kök klasörden veya başka bir uygun yerden başlayın. Ardından klasörleri daha kısa adlara sahip olacak şekilde yeniden adlandırın. Bu adım bu sorunu çözmezse( örneğin, bir dosya 128 klasör derinliğindeyse) Çözüm 4'e gidin.
Çözüm 3: Sürücüyü yolun yapısındaki bir klasöre eşleme
Bir sürücüyü hedef dosya veya klasörün yolunun yapısı içindeki bir klasöre eşleyin. Bu yöntem sanal yolu kısaltır.
Örneğin, aşağıdaki gibi yapılandırılmış bir yolunuz olduğunu varsayalım:
\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...
Bu yolda toplam karakter sayısı 255 karakterden fazladır. Bu yolun uzunluğunu 73 karaktere kısaltmak için bir sürücüyü SubfolderName4 ile eşleyin.
Çözüm 4: Klasör kadar derin bir ağ paylaşımı kullanın
1, 2 ve 3 çözümleri uygun değilse veya sorunu çözmezse, klasör ağacında olabildiğince derin bir ağ paylaşımı oluşturun. Ardından paylaşıma erişerek klasörleri yeniden adlandırın.
Çözünürlük 5: Derin yollardan geçebilen bir araç kullanma
Birçok Windows programı en fazla yol uzunluğunun 255 karakterden kısa olmasını bekler. Bu programlar yalnızca bu tipik yolları işlemek için yeterli iç depolama alanı ayırır. NTFS bu sınıra sahip değildir ve çok daha uzun yolları barındırabilir.
Klasör yapınızın zaten oldukça derin olan bir noktasında bir paylaşım oluşturur ve ardından paylaşımı kullanarak bu noktanın altında derin bir yapı oluşturursanız bu sorunla karşılaşabilirsiniz. Klasör ağacında yerel olarak çalışan bazı araçlar kökten başlayarak tüm ağaçtan geçemeyebilir. Paylaşımdan geçebilmeleri için bu araçları özel bir şekilde kullanmanız gerekebilir. CreateFile API belgelerinde, bu durumda tüm ağaçtan geçiş yapmak için bir yöntem açıklanır.
Genellikle, dosyaları oluşturan yazılımı kullanarak yönetebilirsiniz. 'den MAX_PATH
daha derin dosyalar oluşturabilen bir programınız varsa, dosyaları silmek veya yönetmek için genellikle aynı programı kullanabilirsiniz. Genellikle aynı paylaşımı kullanarak bir paylaşımda oluşturulan dosyaları silebilirsiniz.
Neden 5: Dosya adı Win32 ad alanına ayrılmış bir ad içerir
Dosya adı Win32 ad alanında lpt1 gibi ayrılmış bir ad içeriyorsa, dosyayı silemezsiniz. Bu sorunu çözmek için Win32 olmayan bir programı kullanarak dosyayı yeniden adlandırın. PosIX aracını veya dosyayı kullanmak için uygun iç söz dizimini kullanan başka bir aracı kullanabilirsiniz.
Ayrıca, dosyanın yolunu belirtmek için belirli bir söz dizimi kullanıyorsanız tipik Win32 ayrılmış ad denetimlerini atlamak için bazı yerleşik komutları kullanabilirsiniz.
Tipik Win32 CreateFile mekanizmasını kullanarak bir dosya tanıtıcısı açarsanız, bazı dosya adları eski stil DOS cihazları için ayrılır. Geriye dönük uyumluluk için bu dosya adlarına izin verilmez ve tipik Win32 dosya çağrıları kullanılarak oluşturulamaz. Bu sorun NTFS'nin bir sınırlaması değildir.
Bir Win32 programı kullanarak, dosya oluşturulduğunda veya silindiğinde yapılan tipik ad denetimlerini, klasörlerden MAX_PATH
daha derin klasörlerde çapraz geçiş yapmak için kullandığınız tekniği kullanarak atlayabilirsiniz. Ayrıca, bazı POSIX araçları bu ad denetimlerine tabi değildir.
Neden 6: Dosya adı Win32 ad alanında geçersiz bir ad içeriyor
Dosya adında geçersiz bir ad varsa, dosyayı silemezsiniz. Örneğin, dosya adının sonunda bir boşluk veya sondaki bir nokta vardır veya dosya adı yalnızca boşluklardan oluşur. Bu sorunu çözmek için, dosyayı silmek için uygun iç söz dizimini kullanan bir araç kullanın. Söz dizimini "\\?\"
bu dosyalar üzerinde çalışmak için bazı araçlarla kullanabilirsiniz. Bir örnek aşağıda verilmiştir:
del "\\?\c:\<path_to_file_that contains a trailing space.txt>"
Bu sorunun nedeni Neden 4'e benzer. Adında sonda boşluklar veya sondaki dönemler bulunan bir dosyayı açmak için tipik Win32 söz dizimi kullanırsanız, asıl dosya açılmadan önce sondaki boşluklar veya dönemler çıkarılır. Örneğin, aynı klasörde ve AFile.txt
adlı AFile.txt
iki dosyanız vardır ve dosya adından sonraki boşluğu not edin. Standart Win32 çağrılarını kullanarak ikinci dosyayı açmaya çalışırsanız, bunun yerine ilk dosyayı açarsınız. Benzer şekilde, adı yalnızca boşluk karakteri olan bir dosyanız varsa ve standart Win32 çağrılarını kullanarak açmaya çalışırsanız, bunun yerine dosyanın üst klasörünü açarsınız. Bu durumda, bu dosyalardaki güvenlik ayarlarını değiştirmeye çalışırsanız, bunu yapamayabilirsiniz veya farklı dosyalardaki ayarları beklenmedik bir şekilde değiştirebilirsiniz. Bu davranış oluşursa, aslında kısıtlayıcı ACL'ye sahip bir dosya için izniniz olduğunu düşünebilirsiniz.
Nedenlerin birleşimleri
Bazen bu nedenlerin birleşimleriyle karşılaşabilirsiniz. Bir dosyayı silme yordamını daha karmaşık hale getirir. Örneğin, bilgisayarın yöneticisi olarak oturum açarsanız, Neden 1 (bir dosyayı silme izniniz yok) ve Neden 5 (dosya adı, dosya erişiminin farklı veya var olmayan bir dosyaya yeniden yönlendirilmesine neden olan bir sondaki karakteri içerir) bir bileşimiyle karşılaşabilir ve dosyayı silemezsiniz. Dosyanın sahipliğini alarak ve izin ekleyerek Neden 1'i çözmeye çalışırsanız, kullanıcı arabirimindeki ACL düzenleyicisi Neden 6 nedeniyle uygun dosyaya erişemediğinden dosyayı silemeyebilirsiniz.
Bu durumda, subinacl yardımcı programını anahtarıyla /onlyfile
kullanabilirsiniz (bu yardımcı program Resource Kit'e dahildir), aksi halde erişilemeyen bir dosyadaki sahipliği ve izinleri değiştirebilirsiniz. Bir örnek aşağıda verilmiştir:
subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F
Not
Bu komut, okunabilirlik için sarmalanmış tek bir komut satırıdır.
Bu örnek komut satırı, etki alanı\yönetici hesabının dosyanın sahibi olması ve bu hesabın dosya üzerinde tam denetime sahip olması için sondaki alanı içeren dosyayı değiştirir C:\<path_to_problem_file>
. Artık aynı "\\?\"
söz dizimine sahip Del komutunu kullanarak bu dosyayı silebilirsiniz.