NTFS dosya sistemi birimindeki bir dosyayı veya klasörü silemezsiniz

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.

Şunlar için geçerlidir: Windows Server 2012 R2
Özgün KB numarası: 320081

Not

NTFS, klasörleri dahili olarak ö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 bir Access Control 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, dosya üzerinde açıkça herhangi bir 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, izinleri görüntülemek veya değiştirmek için bazı güvenlik araçlarını kullanamazsınız

Bu sorunu geçici olarak çözmek için başka bir araç kullanın (örneğin, daha sonraki bir Cacls.exe derlemesi).

ACL'deki Access Control Girişleri (ACL) türüne 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 dizide ACL'leri olan bir ACL yazmasını engellemez. Windows'un önceki sürümlerinde, Windows bu kurallı olmayan ACL'leri okumayı denediğinde 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üleyemiyor veya düzenleyemiyor olsanız bile, dosyaya erişim kazanmak 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, dosyayı açan 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 yollarla 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 doğasına 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 bir 8.3 adı 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ünü 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: Bir 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ı kullanma

1, 2 ve 3 çözümleri uygun değilse veya sorunu çözmezse, klasör ağacının en derin kısmı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ızda zaten oldukça derin olan bir noktada bir paylaşım oluşturursanız 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şımda geçiş yapmak 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_PATHdaha derin dosyalar oluşturabilen bir programınız varsa, dosyaları silmek veya yönetmek için genellikle aynı programı kullanabilirsiniz. Bir paylaşımda oluşturulan dosyaları genellikle aynı paylaşımı kullanarak silebilirsiniz.

Neden 5: Dosya adı Win32 ad alanında 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. Dosyayı kullanmak için uygun iç söz dizimini kullanan bir POSIX aracı veya başka bir araç kullanabilirsiniz.

Ayrıca, dosyanın yolunu belirtmek için belirli bir söz dizimi kullanıp kullanmadığınıza ilişkin tipik Win32 ayrılmış ad denetimlerini atlamak için bazı yerleşik komutları kullanabilirsiniz.

Tipik Win32 CreateFile mekanizmasını kullanarak bir dosyanın tanıtıcısını açarsanız, bazı dosya adları eski stil DOS cihazları için ayrılmıştı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 Dosya oluşturulduğunda veya silindiğinde yapılan tipik ad denetimlerini, klasörlerde daha MAX_PATHderine doğru geçiş yapmak için kullandığınız tekniği kullanarak atlamak için Win32 programını kullanabilirsiniz. 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. Bu dosyalar üzerinde çalışmak için söz dizimini "\\?\" bazı araçlarla kullanabilirsiniz. İşte bir örnek:

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 dizimini kullanırsanız, asıl dosya açılmadan önce sondaki boşluklar veya noktalardan çıkarılır. Örneğin, aynı klasörde ve AFile.txt adlı AFile.txt iki dosyanız var, dosya adından sonraki alanı 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 üzerinde 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 (dosya 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) birleşimiyle karşılaşabilirsiniz ve dosyayı silemezsiniz. Dosyanın sahipliğini alıp 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ı anahtarla /onlyfile birlikte kullanabilirsiniz (bu yardımcı program Kaynak Seti'ne dahildir), aksi halde erişilemeyen bir dosyadaki sahipliği ve izinleri değiştirebilirsiniz. İşte bir örnek:

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ı, sondaki C:\<path_to_problem_file> alanı içeren dosyayı, etki alanı\yönetici hesabının dosyanın sahibi olması ve bu hesabın dosya üzerinde tam denetime sahip olması için değiştirir. Artık aynı "\\?\" söz dizimine sahip Del komutunu kullanarak bu dosyayı silebilirsiniz.