ทำไมฉันไม่สามารถตั้งชื่อโฟลเดอร์หรือไฟล์ 'CON' ใน Windows ได้


30

ใน Windows ทุกรุ่นเราไม่สามารถเปลี่ยนชื่อไฟล์หรือชื่อโฟลเดอร์CONโดยไม่ต้องใช้ซอฟต์แวร์เปลี่ยนชื่อไฟล์บุคคลที่สาม การพยายามทำสิ่งนี้ใน Windows 7 ทำให้เกิดข้อผิดพลาด:

ชื่ออุปกรณ์ที่ระบุไม่ถูกต้อง

พยายามที่จะบันทึกไฟล์con.txtใน Notepad นำไปสู่ข้อผิดพลาดที่คล้ายกัน:

ชื่อไฟล์นี้สงวนไว้สำหรับการใช้งานโดย Windows
เลือกชื่ออื่นแล้วลองอีกครั้ง

เหตุใดเราไม่สามารถตั้งชื่อไฟล์หรือโฟลเดอร์CONใน Windows ได้


คำตอบ:


35

"con" เป็นชื่อของอุปกรณ์ I / O ระบบคอนโซล

  • แย้ง
  • ทำผิดพลาด
  • NUL

และอีกคู่ฉันคิดว่า

ในสมัยก่อนเป็นเรื่องปกติใน DOS เพื่อสร้างไฟล์ (และฉันยังคงทำเช่นนี้เป็นครั้งคราว) ด้วย:

C:\>copy con foo.txt
I'm typing some text here.
^Z
    1 file(s) copied.
C:\>

การแก้ไขเล็กน้อย: err ไม่ได้จองไว้ รายการทั้งหมดของชื่ออุปกรณ์ที่สงวนไว้คือ: con, nul, prn, com1..9 และ lpt1..9 พวกเขาจะสงวนไว้แม้เมื่อใช้กับส่วนขยายใด ๆ (เช่นcon.txt)
efotinis

"นอกจากเราจะใช้ซอฟต์แวร์การเปลี่ยนชื่อ" เกี่ยวกับส่วนที่ยกมาอย่างไร "ซอฟต์แวร์การเปลี่ยนชื่อ" จะแก้ไขสิ่งที่เป็นขีด จำกัด ของระบบปฏิบัติการได้อย่างไร
Sathyajith Bhat

1
คุณมีฉัน. ฉันสงสัยว่า "การเปลี่ยนชื่อซอฟต์แวร์" ใด ๆ ก็สามารถทำได้ แต่ถ้าทำได้ฉันก็กังวลว่าจะสามารถเปิดหรือย้ายไฟล์ได้ ดังที่คุณกล่าวไปแล้วระบบปฏิบัติการจะมีปัญหากับมัน
JMD

11
รายการหลักอยู่ที่msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx อย่าใช้ชื่ออุปกรณ์ที่สงวนไว้ต่อไปนี้สำหรับชื่อไฟล์: CON, PRN, AUX, NUL, COM1 , COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 และ LPT9 หลีกเลี่ยงชื่อเหล่านี้ตามด้วยนามสกุล ตัวอย่างเช่น NUL.txt ไม่แนะนำ
shf301

1
@Sathya: โดยใช้\\? \ คำนำหน้าเพื่อหลีกเลี่ยงการแยกชื่อไฟล์ ตัวอย่างเช่น "\\? \ C: \ con \ nul.txt"
grawity

13

CONเป็นชื่อที่สงวนไว้ใน Windows ดังนั้นPRN, AUX, NUL, LPT1และอื่น ๆ


2
CON สั้นสำหรับคอนโซล เปิดหน้าต่างพรอมต์คำสั่งนำทางไปยังไดเรกทอรีที่มีไฟล์ข้อความและพิมพ์ "copy file.txt con" มันจะเขียนเนื้อหาของไฟล์ข้อความไปยังคอนโซล (หน้าต่างพรอมต์คำสั่ง)
Keltari

12

ฉันให้คำตอบนี้ซ้ำซ้อนและคิดว่าฉันโพสต์ไว้ที่นี่เพื่อการอ้างอิงของคุณ:

ตามที่ระบุไว้ก่อนหน้า มันเป็นคำสงวนจากด้านหลังใน MS-DOS สำหรับอุปกรณ์ CONsole (เท่าที่ฉันจำได้) แต่คุณสามารถบังคับให้ windows / dos สร้างโฟลเดอร์ให้คุณได้ สำหรับอุปกรณ์จะใช้รูปแบบ\\.\[RESERVED_WORD]เพื่อเข้าถึง "ไฟล์" (อุปกรณ์เหล่านี้ใช้ไฟล์เพื่อการสื่อสาร) เมื่อต้องการบังคับให้ windows สร้างโฟลเดอร์ของคุณmkdir [RESERVED_WORD]ให้ทำดังนี้:

mkdir \\.\[absolute path to folder of choice, including drive letter]\[RESERVED_WORD]

เช่นการสร้างโฟลเดอร์ CON บนเดสก์ท็อปของฉัน

mkdir \\.\C:\Users\me\Desktop\CON

ในการลบโฟลเดอร์คุณต้องอ้างอิงด้วยวิธีเดียวกันมิฉะนั้นโฟลเดอร์จะไม่ทำงาน

rmdir \\.\C:\Users\me\Desktop\CON

คำแนะนำของฉันคือการใช้ชื่ออื่น มันจะยากมากที่จะอ้างถึงมันผ่านเส้นทางที่แน่นอนโดยเฉพาะอย่างยิ่งถ้าคุณกำลังพัฒนาแอพที่คุณวางแผนจะปรับใช้


4

นี่เป็นเพราะมันถูกใช้เพื่อเป็นตัวแทนของ "อุปกรณ์ภายใน" อย่างไรก็ตามคุณสามารถสร้างโฟลเดอร์นี้โดยใช้คำสั่งต่อไปนี้ในพรอมต์คำสั่ง:

C:\>md \\.\e:\con

โฟลเดอร์นี้ไม่สามารถลบได้ด้วยการคลิกขวาลบ คุณต้องใช้คำสั่งต่อไปนี้ (อีกครั้งในพรอมต์คำสั่ง):

C:\>rd \\.\e:\con

ที่มา: http://yhisham.blogspot.in/2012/09/mystery-about-con-folder-in-windows.html


3

นอกจากคำตอบของ Pablo Santa Cruzนี่คือรายการคำหลักทั้งหมดที่ Windows ใช้ภายในและสงวนไว้ ทั้งหมดต่อไปนี้เป็นแบบตัวเล็ก

  • CON
  • PRN
  • AUX
  • COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, COM0
  • LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT9, LPT0

คุณสามารถใช้_conแทน


2

คุณสามารถเปลี่ยนชื่อได้โดยไม่ต้องใช้ซอฟต์แวร์พิเศษใด ๆ เพียงแค่พรอมต์คำสั่ง:

ตัวอย่างเช่น:

C:\>echo Test > \\?\C:\con
C:\>type \\?\C:\con
Test
C:\>rename \\?\C:\con test.txt
C:\>type test.txt
Test

หลังจากนั้น\\?\ควรระบุเส้นทางแบบเต็ม


0

เช่นเดียวกับที่มีอักขระที่ไม่สามารถใช้ในชื่อไฟล์ได้นอกจากนี้ยังมีหลายคำ (ชื่อไฟล์ทั้งหมด) ที่ไม่สามารถใช้งานได้เนื่องจากถูกสงวนไว้


0

copy conเป็นวิธีโบราณ (MS-DOS) ในการสร้างไฟล์ข้อความ ตัวอย่างเช่น:

copy con output.txt

ดังนั้นจึงเป็นคำสงวนและไม่สามารถใช้เป็นชื่อโฟลเดอร์ใน Windows


0

ตามที่กล่าวไว้คุณสามารถสร้างและจัดการไฟล์และโฟลเดอร์ด้วยชื่อที่สงวนไว้ในบรรทัดคำสั่งโดยใช้อุปกรณ์หรือชื่อไฟล์เนมสเปซเช่น\\.\C:\NULแต่ดูว่าเกิดอะไรขึ้นเมื่อคุณพยายามเข้าถึงไฟล์หรือโฟลเดอร์ผ่าน Windows Explorer:

เกิดข้อผิดพลาดในการเปิดโฟลเดอร์ชื่อ NUL เกิดข้อผิดพลาดในการลบโฟลเดอร์ชื่อ NUL

การเข้าถึงวัตถุที่มีชื่ออุปกรณ์ที่สงวนไว้นั้นจะถือว่าเป็นการอ้างถึงอุปกรณ์ที่ระบุโดยชื่อนั้นเว้นแต่คุณจะใช้วิธีแก้ปัญหา namespace ดังกล่าวข้างต้น ข้อผิดพลาดเหล่านี้เกิดขึ้นเนื่องจาก Windows จะพยายามที่จะดำเนินการกับพวกเขาราวกับว่าพวกเขาโฟลเดอร์ปกติ แต่คุณไม่สามารถเปิดอุปกรณ์ที่มีชื่อNUL, CONหรือเป็นโฟลเดอร์จึงเป็นIncorrect functionข้อผิดพลาด (ซึ่งมีความคล้ายคลึงกับInappropriate ioctl for deviceข้อผิดพลาดในลินุกซ์)


3
คุณได้ผสมคำศัพท์เล็กน้อย \\.\…เป็นWin32 อุปกรณ์ namespace , \\?\…เป็นWin32 ชื่อไฟล์ (ยังโฟลเดอร์) namespaceและ\\compname\…เป็นUNC ( เครือข่าย ) เส้นทาง
Synetech

@Synetech: แก้ไขแล้ว
bwDraco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.