Sebulan yang lalu, saya menghapus sumber Linux di folder di Cygwin (saya ingin tahu apakah itu akan dikompilasi dengan MinGW karena komputer saya yang lain menjalankan Linux adalah Sempron single core lambat). Saya mencoba menghapusnya, tetapi masih ada 1 file lagi, dan itu tidak akan dihapus ...
Cygwin tinggal di C:\cygwin
, dan saya untar sumbernya C:\cygwin\src\linux-3.7.1
. Itu tidak mengkompilasi ... Jadi saya mencoba menghapus folder. Itu berjalan dengan baik, sampai pada akhirnya, ketika saya menyadari tidak semua file dihapus. Saya mencoba menghapus linux-3.7.1
folder lagi, dan muncul kesalahan:
Saya membuka folder, dan menemukan bahwa ada 1 file sumber yang tersisa:, aux.c
yang ada di C:\cygwin\src\linux-3.7.1\drivers\gpu\drm\nouveau\core\subdev\i2c\aux.c
.
Tidak akan:
- Menghapus
- Buka
- Pindah
Properti Umum:
Properti keamanan:
Bagaimana cara menghapus file ini?
Jawaban:
Coba ini dari prompt perintah (tinggi):
sumber
aux.c
sudah dihapus, tapi sekarang folder `src` tampaknya sedang digunakan ketika saya mencoba untuk menghapusnyard /s /q \\?\C:\cygwin\src
akan membantu.Masalah yang Anda hadapi adalah karena reservasi DOS kuno.
File dalam daftar di bawah ini memiliki arti khusus. Bagian dari itu masih ada dalam versi windows modern:
CON, PRN, AUX , CLOCK $, NUL, COM1, COM2, COM3, COM5, COM6, COM7, COM9, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, dan LPT9.
Cara termudah untuk menghapusnya adalah mem-boot sistem operasi yang tidak memperlakukan nama file ini sebagai istimewa. (mis. boot liveCD non-windows).
[sunting] Pengujian dilakukan pada win7-x86 ultimate:
Membuat file uji sederhana:
Memeriksa isinya:
Sekarang dengan aux .c
Tampaknya bagian-bagian windows masih kompatibel ke belakang.
sumber
aux.c
copy con aux.c
pada win7 dan gagal. (copy con test.c
berhasil).Dalam hal ini jelas tentang makna khusus yang
aux
diwarisi dari zaman DOS , seperti yang ditunjukkan Hennes dengan benar. Namun, bagi pembaca yang tersandung masalah ini di masa depan saya ingin menambahkan kasus lain yang memungkinkan di mana perilaku ini dapat dilihat.Saat itulah file dibuat dengan titik trailing. Ada juga kasus yang lebih eksotis. Tetapi
filename.ext.
akan menjadi nama file seperti itu dan biasanya tidak bisa dihapus dari subsistem Win32. Di sinilah trik dari Karan masuk. S / dia menggunakan nama yang sebelum diteruskan ke lapisan di bawah subsistem Win32 akan diubah dari\\?\C:\...
bentuknya ke "asli" (ini juga bagaimana driver filter sistem file melihatnya) bentuk\??\C:\...
. Sedangkan tergantung pada versi Windows ini dapat menjadi apa yang disebut direktori objek (gunakan WinObj dari Sysinternals / Microsoft untuk mengintip ke dalam namespace pengelola objek) atau tautan simbolis (jangan dikacaukan dengan entitas yang diidentifikasi secara identik di NTFS sejak Vista) ke direktori objek lain seperti\DosDevices
. Yang terakhir hanyalah satu nama dan menggambarkan bagian dari namespace manajer objek yang terlihat oleh proses Win32 secara default. Untuk lebih jelasnya lihat seri buku Windows Internal atau baca di jalur parsing khususnya di Google Project Zero (Panduan Definitif tentang Win32 ke NT Path Conversion) . Khususnya Anda mungkin ingin memperhatikan perbedaan antara Win32 File Namespaces dan Win32 Device Namespaces .Sekarang bagaimana file seperti itu bisa dibuat di tempat pertama? Ada beberapa kemungkinan.
\\?\X:
awalan untuk nama jalur untuk memperpanjang panjang jalur yang tersedia dari 260 karakter menjadi sekitar 32767 karakter (lihat catatan kaki 1!) menciptakan file di tempat pertama, sehingga menghindari beberapa keterbatasan subsistem Win32.Dua poin terakhir juga mengisyaratkan salah satu solusi yang disebutkan: boot CD live non-Windows dan hapus file.
Masalah sebenarnya dapat dibandingkan dengan kasus di mana program Win32 non-Unicode lama dihadapkan dengan nama file dari beberapa halaman kode. Seringkali ia tidak dapat "menemukan" beberapa dari mereka, karena masing-masing ANSI codepage masing-masing hanya dapat memuat 256 karakter, sedangkan UTF-16 (bukan subsetnya UCS-2, namun) secara teoritis dapat menyandikan jumlah poin kode yang hampir tak terbatas (baca topik di unicode.org dan Wikipedia ).
Semoga ini bisa membantu memahami masalah mendasar sedikit lebih banyak. Tidak ingin mengedit jawaban panjang ini menjadi salah satu jawaban lain, meskipun hanya melengkapi mereka. Jawaban yang lain benar-benar valid tanpa jawaban ini.
Catatan Kaki 1: jumlah maksimum karakter dalam path tidak absolut karena path yang dekat dengan maksimum absolut (32767 karakter) dapat diperluas oleh manajer objek dan filter sistem file atau sistem file itu sendiri (mis. Titik reparse) .
sumber
Saya memiliki masalah ini dan sangat frustrasi, tidak ada yang berhasil. Kemudian, saya menggunakan CD Linux Ubuntu. Di-boot dari CDROM, pergi ke mode demo, diakses di tempat file-file bermasalah dan hanya dihapus. Itu bekerja seperti mimpi.
sumber