ทำไมไฟล์นี้จึงไม่มีอยู่เมื่อพยายามลบ


9

หนึ่งเดือนหรือมากกว่านั้นฉันยกเลิกการติดตั้งแหล่ง Linux ในโฟลเดอร์ใน Cygwin (ฉันอยากรู้ว่าจะรวบรวมกับ MinGW หรือไม่เพราะคอมพิวเตอร์เครื่องอื่นที่ใช้ Linux นั้นเป็น Sempron แกนเดี่ยวที่ช้า) ฉันพยายามลบมันออกไป แต่มีเหลืออีก 1 ไฟล์และมันจะไม่ลบ ...

Cygwin อยู่ในC:\cygwinและฉัน untarred C:\cygwin\src\linux-3.7.1แหล่งที่มาใน มันไม่ได้รวบรวม ... ดังนั้นฉันพยายามลบโฟลเดอร์ มันเป็นไปด้วยดีจนกระทั่งเมื่อฉันรู้ว่าไม่ได้ลบไฟล์ทั้งหมด ฉันพยายามลบlinux-3.7.1โฟลเดอร์อีกครั้งและเกิดข้อผิดพลาดขึ้น:

ไม่พบรายการ

ฉันเปิดโฟลเดอร์และพบว่ามีไฟล์ต้นฉบับเหลือ 1 ไฟล์: aux.cซึ่งอยู่ในC:\cygwin\src\linux-3.7.1\drivers\gpu\drm\nouveau\core\subdev\i2c\aux.cนั้น

มันจะไม่:

  • ลบ
  • เปิด
  • ย้าย

คุณสมบัติทั่วไป:

ทั่วไป

คุณสมบัติความปลอดภัย:

ความปลอดภัย

ฉันจะลบไฟล์นี้ได้อย่างไร


เอาล่ะเรียกใช้ในขณะนี้
อเล็กซ์

เสร็จแล้วไม่ทำงานแม้ว่า ...
Alex

1
ไม่ควรทำงาน การไม่สามารถลบออกจากภายใน DOS / windows ได้รับการออกแบบตามที่ ดังนั้นจึงไม่ใช่ข้อผิดพลาดที่คุณสามารถแก้ไขด้วยวิธีนี้
Hennes

คำตอบ:


14

ลองสิ่งนี้จากพรอมต์คำสั่ง (ยกระดับ):

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

Ok aux.cถูกลบ แต่ตอนนี้โฟลเดอร์ `src` ถูกใช้งานอย่างเห็นได้ชัดเมื่อฉันพยายามที่จะลบมัน
อเล็กซ์

ไม่มีอะไรซ่อนอยู่ข้างใน อาจrd /s /q \\?\C:\cygwin\srcจะช่วย
Karan

พิมพ์เอาต์พุตที่ `src` ถูกใช้งาน
Alex

2
Karan: โอ้ฉลาด หลีกเลี่ยงเนมสเปซระบบไฟล์ปกติ @Alex Yan: ไม่เปิดหน้าต่าง cmd ในโฟลเดอร์?
Hennes

ใช่คุณควรใช้เคล็ดลับเว้นแต่จะมีบางสิ่งที่ค้างไว้ในโฟลเดอร์หรือไฟล์ที่อยู่ภายใน ... ปิดหน้าต่าง / แอปพลิเคชันอื่นที่เปิดอยู่ทั้งหมดและตรวจสอบคุณสมบัติของ src ขนาดและจำนวนไฟล์ภายในที่แสดงคืออะไร
Karan

13

ปัญหาที่คุณพบคือการจอง DOS โบราณ

ไฟล์ในรายการด้านล่างมีความหมายพิเศษ ส่วนหนึ่งที่ยังคงอยู่ในรุ่น windows วันที่ทันสมัย

CON, PRN, AUX , นาฬิกา $, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT6, LPT7, LPT8, LPT8 และ LPT9

วิธีที่ง่ายที่สุดในการลบไฟล์เหล่านี้คือการบูตระบบปฏิบัติการซึ่งไม่ถือว่าชื่อไฟล์เหล่านี้เป็นพิเศษ (เช่นบูตใด ๆ ที่ไม่ใช่ Windows LiveCD)

การทดสอบเสร็จสิ้นใน win7-x86 ultimate:

การสร้างไฟล์ทดสอบอย่างง่าย:

S: \> copy con foo.c
ทดสอบ
^ Z
        คัดลอก 1 ไฟล์

ตรวจสอบเนื้อหา:

S: \> พิมพ์ foo.c
ทดสอบ

ขณะนี้มีaux .c

S: \> copy con aux.c
^ Z
ระบบไม่พบแฟ้มที่ระบุ.
        คัดลอก 0 ไฟล์

ดูเหมือนว่าบางส่วนของหน้าต่างยังคงใช้งานได้ย้อนหลัง


แต่ไฟล์นี้คือaux.c
Alex

3
มันยังคงเริ่มต้นด้วย aux และรูปแบบชื่อไฟล์เก่าคือนามสกุล "Filename" dot " และฉันเพิ่งทดสอบcopy con aux.cใน win7 และมันล้มเหลว ( copy con test.cใช้งานได้)
Hennes

7

ในกรณีนี้เห็นได้ชัดว่ามันเกี่ยวกับความหมายพิเศษของการauxสืบทอดจาก DOS ครั้งขณะที่Hennesชี้ให้เห็นอย่างถูกต้อง อย่างไรก็ตามสำหรับผู้อ่านที่สะดุดกับเรื่องนี้ในอนาคตฉันต้องการเพิ่มอีกกรณีที่เป็นไปได้ที่พฤติกรรมนี้สามารถมองเห็นได้

นั่นคือเมื่อไฟล์ถูกสร้างขึ้นโดยมีจุดต่อท้าย มีกรณีที่แปลกใหม่เช่นกัน แต่filename.ext.จะเป็นชื่อไฟล์ดังกล่าวและไม่สามารถลบออกจากระบบย่อย Win32 ได้ตามปกติ นี่คือสิ่งที่เคล็ดลับจากKaran เข้ามา S / เขาใช้ชื่อที่ก่อนที่จะถูกส่งผ่านไปยังเลเยอร์ด้านล่างระบบย่อย Win32 จะถูกเปลี่ยนจาก\\?\C:\...รูปแบบเป็น "ดั้งเดิม" (นี่คือวิธีที่โปรแกรมควบคุมตัวกรองระบบไฟล์มองเห็น) \??\C:\...ฟอร์ม ในขณะที่ขึ้นอยู่กับรุ่นของ Windows นี่อาจเป็นไดเร็กตอรี่อ็อบเจกต์ที่เรียกว่า (ใช้ WinObj จาก Sysinternals / Microsoft เพื่อแอบดูเนมสเปซของ object manager) หรือลิงค์สัญลักษณ์ (เพื่อไม่ให้สับสนกับเอนทิตี้ของชื่อใน NTFS ตั้งแต่ Vista) ไปยังไดเรกทอรีวัตถุอื่นเช่น\DosDevices. หลังเป็นเพียงชื่อเดียวและอธิบายส่วนของเนมสเปซตัวจัดการวัตถุที่มองเห็นได้สำหรับกระบวนการ Win32 โดยค่าเริ่มต้น สำหรับรายละเอียดเพิ่มเติมตรวจสอบหนังสือชุดของ Windows Internals หรืออ่านข้อมูลเกี่ยวกับการแยกเส้นทางในกว่าโดยเฉพาะอย่างยิ่งในโครงการศูนย์ของ Google (แตกหักคู่มือใน Win32 เพื่อ NT เส้นทางการแปลง) โดยเฉพาะอย่างยิ่งที่คุณอาจต้องการที่จะใส่ใจกับความแตกต่างระหว่างWin32 Namespaces ไฟล์และWin32 Namespaces

ตอนนี้จะสร้างไฟล์ดังกล่าวได้อย่างไรในตอนแรก? มีความเป็นไปได้หลายอย่าง

  1. โปรแกรม Win32 ที่ใช้ส่วน\\?\X:นำหน้าสำหรับชื่อพา ธ เพื่อขยายความยาวพา ธ ที่มีอยู่จาก 260 ตัวอักษรไปที่ประมาณ 32767 ตัวอักษร (ดูเชิงอรรถ 1!) สร้างไฟล์ในตอนแรกจึงหลีกเลี่ยงข้อ จำกัดบางประการของระบบย่อย Win32
  2. โปรแกรมที่รูตในระบบย่อยอื่น ระบบย่อย POSIX เดิม (ต่อมาInterix ในขณะนี้ SUA), ระบบย่อย OS / 2 (หายไปนาน แต่เคยมีอยู่ใน NT 3.51) หรือเลเยอร์บางอย่างที่ไม่ได้เป็นระบบย่อยในความรู้สึกของ Windows (Cygwin กับความรู้ของฉัน) ไฟล์หรือโฟลเดอร์ WSLในทำนองเดียวกัน(ระบบย่อย Windows สำหรับ Linux)บน Windows 10 เป็นตัวเลือกอื่น
  3. ระบบปฏิบัติการที่แตกต่างกันสร้างมัน (เช่นบูต Linux ขนาน)
  4. มันเป็นไฟล์ในเครือข่ายที่ใช้ร่วมกันซึ่งตั้งอยู่บนเซิร์ฟเวอร์ที่ไม่ใช่ Windows

จุดสองจุดสุดท้ายยังบอกใบ้ถึงการเยียวยาที่กล่าวถึง: บู๊ตซีดีที่ไม่ใช่ Windows Live และลบไฟล์ออก

ปัญหาสามารถเปรียบเทียบได้กับกรณีที่พบโปรแกรมที่ไม่ใช่ Unicode Win32 ชื่อไฟล์จากหลาย ๆ หน้า บ่อยครั้งที่มันไม่สามารถ "ค้นหา" บางอย่างได้เพราะแต่ละเพจรหัส ANSI สามารถใส่ได้เพียง 256 ตัวอักษรเท่านั้นในขณะที่ UTF-16 (ไม่ใช่เซ็ตย่อย UCS-2 ของมันอย่างไรก็ตาม) ในทางทฤษฎีสามารถเข้ารหัสรหัสคะแนนได้ไม่ จำกัด จำนวน (อ่านหัวข้อที่unicode.orgและWikipedia )

หวังว่าสิ่งนี้จะช่วยให้เข้าใจปัญหาพื้นฐานมากขึ้นอีกเล็กน้อย ไม่ต้องการแก้ไขคำตอบยาว ๆ นี้ในคำตอบอื่นแม้ว่าจะเติมเต็มเท่านั้น คำตอบอื่น ๆ จะสมบูรณ์โดยไม่มีคำตอบนี้


เชิงอรรถ 1:จำนวนอักขระสูงสุดในเส้นทางไม่สมบูรณ์เนื่องจากเส้นทางที่ใกล้เคียงกับจำนวนสูงสุดสูงสุด (32767 ตัวอักษร) อาจขยายได้มากโดยทั้งตัวจัดการวัตถุและตัวกรองระบบไฟล์หรือระบบไฟล์เอง (เช่นจุดแยก) .


ฉันรักพื้นหลังทางเทคนิคที่เพิ่มเข้ามา
Hennes

0

ฉันมีปัญหานี้และรู้สึกผิดหวังมากไม่มีอะไรทำงาน จากนั้นฉันใช้ซีดี Linux Ubuntu บูตจาก CDROM ไปที่โหมดสาธิตเข้าถึงไฟล์ที่มีปัญหาและเพียงแค่ลบออก มันทำงานได้เหมือนฝัน


1
โปรดระวังว่าสาเหตุที่ Windows ไม่สามารถลบไฟล์ได้อาจเป็นเพราะข้อเท็จจริงที่ว่าตัวอักษรที่ไม่ได้รับอนุญาตใน Windows นั้นถูกใส่ลงในชื่อไฟล์บน Linux ฉันค่อนข้างแน่ใจว่าไม่ใช่เพราะ Linux ไม่สนใจ ฉันขอให้ผู้ดูแลอนุมัติการลบข้อความบางส่วนและเก็บส่วนที่ใช้งานได้
Mogget
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.