Bu dosya silinmeye çalışılırken neden görünmüyor?


9

Bir ay kadar önce, Linux kaynağını Cygwin'deki bir klasörde untarled (MinGW ile derlenip derlenmeyeceğini merak ettim çünkü Linux çalıştıran diğer bilgisayarım yavaş bir tek çekirdekli Sempron). Silmeyi denedim, ancak 1 dosya kaldı ve silinmeyecek ...

Cygwin ikamet ediyor C:\cygwinve ben kaynağın yıldızını kaldırdım C:\cygwin\src\linux-3.7.1. Derlenmedi ... Bu yüzden klasörü silmeyi denedim. Sonunda, tüm dosyaların silinmediğini fark edene kadar iyi gidiyordu. linux-3.7.1Klasörü tekrar silmeyi denedim ve bir hata çıktı:

Öğe bulunamadı

Ben klasörü açtı ve sol 1 kaynak dosyası var olduğunu bulduk: aux.c, içindedir C:\cygwin\src\linux-3.7.1\drivers\gpu\drm\nouveau\core\subdev\i2c\aux.c.

O olmaz:

  • Sil
  • Açık
  • Hareket

Genel Özellikler:

Genel

Güvenlik özellikleri:

Güvenlik

Bu dosyayı nasıl kaldırabilirim?


Pekala, şu anda çalışıyor
Alex

Bitti, yine de çalışmadı ...
Alex

1
Çalışmamalı. DOS / Windows içinden silinememesi tasarlandığı gibidir. Bu nedenle, bu şekilde düzeltebileceğiniz bir hata değildir.
Hennes

Yanıtlar:


14

Bunu (yükseltilmiş) komut isteminden deneyin:

del \\?\C:\cygwin\src\linux-3.7.1\drivers\gpu\drm\nouveau\core\subdev\i2c\aux.c

Tamam aux.csilinir, ancak şimdi silmeye çalıştığımda src klasörü görünüşte kullanılıyor
Alex

İçinde gizli bir şey yok mu? Belki rd /s /q \\?\C:\cygwin\srcyardımcı olacaktır.
Karan

`Src` kullanımda olan çıktıyı yazdırır
Alex

2
Karan: Ah, akıllı. Normal dosya sistemi ad alanından kaçınma. @Alex Yan: Klasörde cmd penceresi açık değil mi?
Hennes

Evet, bir şey klasörü veya içindeki bir dosyayı tutmazsa hile yapmalıdır ... Diğer tüm açık pencereleri / uygulamaları kapatın ve src'nin Özelliklerini kontrol edin. İçinde gösterilen dosyaların boyutu ve sayısı nedir?
Karan

13

Karşılaştığınız sorun eski DOS rezervasyonlarından kaynaklanıyor.

Aşağıdaki listedeki dosyaların özel anlamları vardı. Bunun bir kısmı günümüzün Windows versiyonlarında hala mevcut:

CON, PRN, AUX , CLOCK $, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9.

Bunları silmenin en kolay yolu, bu dosya adlarını özel olarak işlemeyen bir işletim sistemini önyüklemektir. (örn. Windows olmayan liveCD'leri önyükleyin).

win7-x86 ultimate'ta yapılan testler:

Basit bir test dosyası oluşturma:

S: \> kopyala foo.c
Ölçek
^ Z
        1 dosya kopyalandı.

İçeriği kontrol etme:

S: \> foo.c yazın
Ölçek

Şimdi aux .c ile

S: \> kopya yardımcı aux.c
^ Z
Sistem belirtilen dosyayı bulamıyor.
        0 dosya kopyalandı.

Görünüşe göre pencerelerin parçaları hala geriye dönük olarak uyumlu.


Ama bu dosyaaux.c
Alex

3
Hala aux ile başlar ve eski dosya adı stili "Dosya adı" nokta "uzantısıdır. Ve ben copy con aux.cwin7 üzerinde test ettim ve başarısız oldu. ( copy con test.cçalışır).
Hennes

7

Bu durumda , Hennes doğru bir şekilde işaret ettiği gibi, açıkça DOS zamanlarından miras alınan özel anlamlaaux ilgiliydi . Bununla birlikte, gelecekte bunun üzerinde tökezleyen okuyucular için, bu davranışın görülebileceği başka bir olası durum eklemek istiyorum.

İşte o zaman bir nokta ile bir dosya oluşturuldu. Daha egzotik durumlar da var. Ancak filename.ext.böyle bir dosya adı olurdu ve normalde Win32 alt sisteminden silinemedi. Karan'dan gelen numara burada devreye giriyor. Win32 alt sisteminin altındaki katmana geçmeden önce \\?\C:\...formundan "native" olarak değiştirilecek bir isim kullanıyor (dosya sistemi filtre sürücülerinin de böyle görüyor) form \??\C:\.... Windows sürümüne bağlı olarak, bu bir nesne dizini (nesne yöneticisi ad alanına bakmak için Sysinternals / Microsoft'tan WinObj kullanın) veya sembolik bir bağlantı (Vista'dan beri NTFS'de aynı adlı varlıkla karıştırılmamalıdır) olabilir. gibi başka bir nesne dizinine\DosDevices. İkincisi yalnızca bir addır ve nesne yöneticisi ad alanının varsayılan olarak Win32 işlemleri tarafından görülebilen bölümünü tanımlar. Daha fazla ayrıntı için kitap serisi Windows Internals'a bakın veya özellikle Google'ın Project Zero'sunda (Win32 - NT Path Conversion'daki Kesin Kılavuz) yol ayrıştırma hakkında bilgi edinin . Özellikle Win32 Dosya Ad Alanları ve Win32 Aygıt Ad Alanları arasındaki farka dikkat etmek isteyebilirsiniz .

Şimdi böyle bir dosya ilk etapta nasıl oluşturulabilir? Birkaç olasılık var.

  1. \\?\X:mevcut yol uzunluğunu 260 karakterden yaklaşık 32767 karaktere (bkz. dipnot 1!) genişletmek için yol adları önekini kullanan bir Win32 programı , dosyayı ilk önce oluşturdu ve böylece Win32 alt sisteminin bazı sınırlamalarını atladı.
  2. farklı bir alt sisteme dayanan bir program. Eski POSIX alt sistemi (daha sonra Interix şimdi SUA), OS / 2 alt sistemi (çoktan gitti, ancak NT 3.51'de mevcuttu) veya Windows anlamında tam olarak bir alt sistem olmayan (Cygwin, bildiklerim) bir katman oluşturdu dosya veya klasör. Benzer şekilde , Windows 10'daki WSL (Linux için Windows Alt Sistemi) artık başka bir adaydır.
  3. farklı bir işletim sistemi oluşturdu (örneğin paralel Linux önyüklemesi).
  4. Windows olmayan bir sunucuda bulunan ağ paylaşımındaki bir dosyadır.

Son iki nokta da bahsedilen çözümlerden birine işaret ediyor: Windows olmayan bir canlı CD'yi önyükleyin ve dosyaları kaldırın.

Sorun aslında eski bir Unicode olmayan Win32 programı birden çok kod sayfasından dosya adlarıyla karşı karşıya olduğu durumla karşılaştırılabilir. Çoğu zaman, bazılarını "bulamaz", çünkü her bir ANSI kod sayfası sadece 256 karakter sığabilir, ancak UTF-16 (ancak UCS-2 alt kümesi değil) teorik olarak neredeyse sınırsız miktarda kod noktasını kodlayabilir (konuyu unicode.org ve Wikipedia'da okuyun ).

Bu altta yatan sorunları biraz daha anlamaya yardımcı olur umarım. Bu uzun cevabı diğer cevaplardan birinde düzenlemek istemiyordu, ancak sadece onları tamamlıyor. Diğer cevaplar bu olmadan mükemmel bir şekilde geçerlidir.


Dipnot 1: mutlak maksimuma yakın bir yol (32767 karakter) hem nesne yöneticisi hem de dosya sistemi filtreleri veya dosya sistemleri tarafından genişletilebilir (örn. Yeniden ayrıştırma noktaları), yoldaki maksimum karakter sayısı mutlak değildir. .


Eklenen teknik arka planı seviyorum.
Hennes

0

Ben bu sorunu vardı ve çok sinirli, hiçbir şey çalıştı. Sonra bir Linux Ubuntu CD kullandım. CDROM'dan önyükleme, demo moduna gitti, zahmetli dosyaların bulunduğu yere erişildi ve sadece sildi. Bir rüya gibi çalışır.


1
Windows'un bir dosyayı silememesinin nedeninin, Windows'ta izin verilmeyen karakterlerin Linux'ta dosya adına konmuş olabileceğini unutmayın. Eminim çünkü Linux umursamıyor. Moderatörlerden bazı metinlerin kaldırılmasını onaylamasını ve kullanılabilir kısmı korumasını istedim.
Mogget
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.