บล็อก

Claude Code มองไม่เห็นไฟล์โปรเจกต์: สาเหตุและวิธีแก้ในปี 2026

Markdown

เหตุใด Claude Code จึงหาไฟล์โปรเจกต์ไม่พบ: อาจเปิดใช้งานจากโฟลเดอร์ผิด ไฟล์อยู่ในโฟลเดอร์ย่อย หรืออยู่ใน .gitignore วิธีให้สิทธิ์เข้าถึงด้วย add-dir, cd และการตั้งค่า

อ่านบทความฉบับเต็ม

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

เกือบทุกครั้งมีสาเหตุเดียว และไม่มีอะไรเสียหาย Claude ไม่ได้เห็นไฟล์ทั้งหมดในคอมพิวเตอร์ แต่เข้าถึงได้เฉพาะโฟลเดอร์ที่คุณเปิดใช้งาน Claude เท่านั้น การเริ่มในโฟลเดอร์ข้างเคียงหรือต่ำกว่ารูทโปรเจกต์อาจทำให้ไฟล์ที่ต้องใช้อยู่นอก working tree แต่เริ่มจากโฟลเดอร์แม่ เช่น home จะให้ขอบเขตกว้างขึ้น ไม่ได้ทำให้โปรเจกต์ลูกเข้าถึงไม่ได้ ฉันจะอธิบายทีละขั้นว่าทำไมจึงเป็นเช่นนี้ และจะให้ Claude เข้าถึงไฟล์ที่ต้องใช้ได้อย่างไร ฉันยกคำสั่งและการตั้งค่าจากเอกสารทางการของ Claude Code โดยตรง ซึ่งฉันตรวจสอบเมื่อต้นเดือนกันยายน 2026

มีเนื้อหาเพิ่มเติมเกี่ยวกับการกำหนดค่าเครื่องมือในเอกสารของ Ailoot

เหตุใด Claude Code จึงมองไม่เห็นไฟล์โปรเจกต์บางไฟล์?

ประเด็นสำคัญ

Claude Code อ่านไฟล์ได้ไม่ใช่จากทั้งไดรฟ์ แต่เฉพาะจากโฟลเดอร์ที่คุณเปิดใช้งาน Claude โฟลเดอร์นี้เรียกว่าไดเรกทอรีทำงาน Claude มองเห็นและอ่านทุกอย่างภายในโฟลเดอร์นี้และโฟลเดอร์ย่อยได้โดยไม่ต้องถาม ส่วนทุกอย่างที่อยู่นอกโฟลเดอร์นี้ — ในโฟลเดอร์ข้างเคียง สูงขึ้นไปหนึ่งระดับ หรืออยู่ในไดรฟ์อื่น — จะเข้าไม่ถึงจนกว่าคุณจะให้สิทธิ์เอง ดังนั้นสาเหตุที่พบบ่อยที่สุดที่ไฟล์ “มองไม่เห็น” จึงเรียบง่ายมาก: คุณเปิด Claude จากโฟลเดอร์อื่น ก่อนอื่นให้ตรวจสอบว่าคุณเปิด Claude จากที่ใดกันแน่

ตามค่าเริ่มต้น Claude Code จะทำงานกับโฟลเดอร์เดียว นั่นคือโฟลเดอร์ที่คุณพิมพ์คำสั่ง claude และเริ่มเซสชัน เอกสารระบุเรื่องนี้ไว้โดยตรง

ตามค่าเริ่มต้น Claude จะเข้าถึงไฟล์ในโฟลเดอร์ที่คุณเปิดใช้งาน Claude

— Claude Code Docs, กำหนดสิทธิ์, เอกสารทางการ

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

โฟลเดอร์ทำงานไม่ตรงกันมีผลได้ เช่น โปรเจกต์อยู่ /Users/you/my-shop แต่เริ่ม Claude ที่ /Users/you/other-project ซึ่งเป็นโฟลเดอร์ข้างเคียง index.html ใน my-shop จึงอยู่นอก working tree ส่วนเริ่มจาก /Users/you ต่างออกไป เพราะ my-shop เป็นลูก ไม่ได้เข้าถึงไม่ได้เพียงเพราะเริ่มจาก home แต่ขอบเขตกว้างเกินที่ตั้งใจ การเข้าถึงโฟลเดอร์ก็ไม่ได้แปลว่าอ่านทุกไฟล์แล้ว

ต่อไปฉันจะแสดงวิธีตรวจสอบและแก้ไข เริ่มจากยืนยันว่า Claude เปิดจากโฟลเดอร์ใด จากนั้นให้สิทธิ์เข้าถึงไฟล์ที่จำเป็นด้วยวิธีต่าง ๆ ตั้งแต่การบอกเพียงครั้งเดียวไปจนถึงการตั้งค่าถาวร

จะตรวจสอบได้อย่างไรว่า Claude Code เปิดจากโฟลเดอร์ใด?

ประเด็นสำคัญ

ถาม Claude ว่าอยู่ในโฟลเดอร์ใด หรือขอให้แสดงไดเรกทอรีปัจจุบันด้วยคำสั่ง pwd ก็ได้ คำสั่งนี้ใช้ตรวจสอบเท่านั้นและไม่เปลี่ยนแปลงอะไร เปรียบเทียบตำแหน่งที่ Claude แสดงกับตำแหน่งจริงของโปรเจกต์ หากพาธไม่ตรงกัน นั่นคือสาเหตุ: Claude เปิดจากโฟลเดอร์ผิด วิธีแก้ที่เชื่อถือได้ยิ่งกว่าคือปิดเซสชันแล้วเปิด Claude ใหม่จากโฟลเดอร์โปรเจกต์โดยตรง โดยไปที่โฟลเดอร์นั้นในเทอร์มินัลแล้วพิมพ์ claude

ก่อนแก้ไขอะไร ให้แน่ใจก่อนว่าปัญหาอยู่ที่โฟลเดอร์จริง ๆ ตรวจสอบได้ง่าย ๆ ขอให้ Claude ในแชตแสดงไดเรกทอรีที่กำลังใช้อยู่ Claude จะเรียกใช้ pwd ซึ่งปลอดภัย เพราะคำสั่งนี้แสดงพาธเท่านั้นและไม่แตะต้องสิ่งใด

pwd

คำตอบแสดงไดเรกทอรีทำงานจริง เทียบกับ path โปรเจกต์เต็ม: /Users/you/other-project เป็นโฟลเดอร์ข้างเคียง /Users/you/my-shop ส่วน /Users/you เป็นแม่ กรณีข้างเคียงทำให้ my-shop อยู่นอก working tree กรณีแม่รวมโปรเจกต์แต่ไม่ได้เลือกรูทเฉพาะนั้น

วิธีที่ตรงไปตรงมาที่สุดในการแก้ความไม่ตรงกันนี้ คือเปิด Claude จากโฟลเดอร์โปรเจกต์โดยตรง ปิดเซสชันปัจจุบัน ไปยังโฟลเดอร์ที่ถูกต้องในเทอร์มินัล แล้วเปิด Claude จากที่นั่น:

# Replace this illustrative path with your actual project root.
cd /Users/you/my-shop
claude

ตอนนี้ my-shop จะเป็นโฟลเดอร์ทำงาน และไฟล์โปรเจกต์ทั้งหมดจะอยู่ในขอบเขตที่ Claude มองเห็น กฎเดียวกันนี้ใช้กับโปรแกรมแก้ไขโค้ดอย่าง VS Code ด้วย: ให้เปิดโฟลเดอร์ที่มีโปรเจกต์อยู่ ไม่ใช่โฟลเดอร์ที่อยู่เหนือขึ้นไปหนึ่งระดับ และไม่ใช่ทั้งไดรฟ์ โฟลเดอร์ที่คุณเปิดเป็นตัวกำหนดว่า Claude จะถือโฟลเดอร์ใดเป็นไดเรกทอรีทำงาน

หากการเปิดใหม่ไม่สะดวก — เช่น คุณให้บริบทแก่ Claude ไปแล้วในเซสชันนี้และไม่อยากเสียข้อมูลนั้น — คุณเพิ่มหรือสลับโฟลเดอร์ระหว่างเซสชันได้ สองส่วนถัดไปจะอธิบายเรื่องนี้

จะแสดงไฟล์ในโฟลเดอร์ข้างเคียงให้ Claude Code เห็นได้อย่างไร?

ประเด็นสำคัญ

เพิ่มโฟลเดอร์ที่ต้องการได้โดยไม่ต้องเริ่มเซสชันใหม่ ด้วยคำสั่ง /add-dir ในแชตโดยตรง: พิมพ์ /add-dir ตามด้วยพาธของโฟลเดอร์ แล้วไฟล์ในนั้นจะพร้อมใช้งานเช่นเดียวกับไฟล์ในโฟลเดอร์หลัก หากต้องการเปิดสิทธิ์เข้าถึงตั้งแต่เริ่มใช้งาน Claude ให้เพิ่มแฟล็ก --add-dir พร้อมพาธในคำสั่ง claude และหากต้องการให้เปิดโฟลเดอร์ทุกครั้งโดยอัตโนมัติ ให้เพิ่มโฟลเดอร์นั้นไว้ใต้คีย์ additionalDirectories ในการตั้งค่า ทั้งสามวิธีทำให้สามารถอ่านไฟล์ในโฟลเดอร์ที่เพิ่มได้โดยไม่ต้องขอการยืนยันแยกต่างหาก

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

วิธีที่ง่ายที่สุดคือทำในเซสชันที่กำลังใช้งานโดยตรงด้วยคำสั่ง:

/add-dir ../assets

พิมพ์ /add-dir ตามด้วยพาธของโฟลเดอร์ แล้ว Claude จะเข้าถึงไฟล์ในนั้นได้ทันทีเช่นเดียวกับไฟล์ในโฟลเดอร์หลัก Claude จะไม่ถามขออนุญาตอีก เพราะโฟลเดอร์ที่เพิ่มใช้กฎเดียวกับไดเรกทอรีทำงาน

ไฟล์ในไดเรกทอรีเพิ่มเติมใช้กฎการเข้าถึงเดียวกับไดเรกทอรีทำงานหลัก: อ่านได้โดยไม่ต้องถามยืนยัน

— Claude Code Docs, กำหนดสิทธิ์, เอกสารทางการ

หากทราบล่วงหน้าว่าจะทำงานกับหลายโฟลเดอร์ ให้เปิดสิทธิ์เข้าถึงตั้งแต่ Claude เริ่มทำงาน โดยใช้พาธเดิมแต่เพิ่มแฟล็ก:

claude --add-dir ../assets

และหากต้องใช้โฟลเดอร์ข้างเคียงเดิมในโปรเจกต์เป็นประจำ ก็ไม่จำเป็นต้องเพิ่มด้วยตนเองทุกครั้ง ไฟล์การตั้งค่า settings.json มีคีย์ additionalDirectories ระบุพาธไว้ แล้ว Claude จะเปิดโฟลเดอร์เหล่านั้นโดยอัตโนมัติทุกครั้งที่เริ่มทำงาน:

{
  "permissions": {
    "additionalDirectories": ["../assets", "../shared"]
  }
}

ข้อควรทราบสำหรับ Windows: คุณไม่สามารถเพิ่มโฟลเดอร์เครือข่ายด้วยพาธลักษณะ \\server\shared ได้ เพราะ Claude ไม่ยอมรับพาธดังกล่าว ให้เชื่อมต่อโฟลเดอร์นั้นเป็นไดรฟ์แยกที่มีอักษรกำกับ แล้วส่งอักษรไดรฟ์นั้นด้วย --add-dir โฟลเดอร์ในเครื่องทั่วไปไม่มีปัญหานี้

หากการเพิ่มโฟลเดอร์ข้างเคียงยังไม่พอ และคุณต้องย้ายไปยังโฟลเดอร์อื่นทั้งหมดล่ะ? มีคำสั่งแยกสำหรับเรื่องนี้ ซึ่งจะอธิบายด้านล่าง

จะเปลี่ยน Claude Code ไปยังโฟลเดอร์อื่นระหว่างเซสชันได้อย่างไร?

ประเด็นสำคัญ

คำสั่ง /cd เปลี่ยนโฟลเดอร์ทำงานหลักโดยไม่ปิดเซสชัน: พิมพ์ /cd ตามด้วยพาธ แล้ว Claude จะย้ายไปที่นั่นโดยเก็บประวัติการสนทนาไว้ ระหว่างการย้าย Claude จะโหลดไฟล์คำสั่ง CLAUDE.md จากโฟลเดอร์ใหม่ และหากคุณยังไม่เคยทำงานในโฟลเดอร์นั้น Claude จะขอให้ยืนยันว่าคุณเชื่อถือโฟลเดอร์นั้น ความแตกต่างจาก /add-dir คือ /add-dir เปิดโฟลเดอร์ข้างเคียงเพิ่มจากโฟลเดอร์หลัก ส่วน /cd ย้ายไดเรกทอรีทำงานทั้งหมดไปยังตำแหน่งใหม่ คำสั่งนี้ใช้งานได้ตั้งแต่เวอร์ชัน 2.1.169

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

/cd ../another-project

หลังจากนั้น Claude จะถือว่าโฟลเดอร์ใหม่เป็นไดเรกทอรีทำงานของตน คุณยังคงมีประวัติการสนทนาทั้งหมด แต่ตำแหน่งอ้างอิงที่ Claude ใช้กับไฟล์จะเปลี่ยนไปยังตำแหน่งใหม่ Claude ยังโหลดไฟล์คำสั่ง CLAUDE.md จากโฟลเดอร์ใหม่ด้วย หากมีไฟล์ดังกล่าวอยู่ กล่าวคือ Claude จะปรับตามกฎของโปรเจกต์ใหม่

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

ความแตกต่างระหว่างสองคำสั่งนี้เข้าใจง่าย /add-dir คงโฟลเดอร์หลักไว้เป็นไดเรกทอรีทำงาน แล้วเปิดโฟลเดอร์ข้างเคียงเพิ่ม เหมาะเมื่อส่วนต่าง ๆ ของโปรเจกต์กระจายอยู่หลายที่ ส่วน /cd ย้ายไดเรกทอรีทำงานทั้งหมดไปยังตำแหน่งใหม่ เหมาะเมื่อเปลี่ยนไปทำงานอีกโปรเจกต์หนึ่ง คำสั่ง /cd เริ่มใช้ในเวอร์ชัน 2.1.169 ดังนั้นหากไม่มีคำสั่งนี้ ให้ปรับปรุง Claude Code ฉันมีคู่มือแยกเกี่ยวกับวิธีอัปเดต Claude Code

การที่ Claude Code มองเห็นไฟล์เป็นเพียงพื้นฐาน ผลลัพธ์ที่สม่ำเสมอไม่ได้มาจากการเข้าถึงไฟล์เพียงอย่างเดียว แต่ขึ้นอยู่กับสิ่งที่อยู่ในไฟล์และวิธีสร้างบริบทให้โปรเจกต์

เหตุใด Claude Code จึงมองไม่เห็นไฟล์ในโฟลเดอร์ย่อย?

ประเด็นสำคัญ

โฟลเดอร์ย่อยทำงานต่างจากโฟลเดอร์ข้างเคียง: Claude เข้าถึงโฟลเดอร์ย่อยได้ แต่เนื้อหาในนั้นจะไม่เข้าสู่บริบทของ Claude ทันที Claude โหลดไฟล์คำสั่งและเนื้อหาในโฟลเดอร์ย่อยตามต้องการ เมื่อเข้าไปค้นหา ไม่ได้โหลดทั้งหมดตอนเริ่มต้น ดังนั้นไฟล์ที่อยู่ลึกลงไปในโฟลเดอร์ย่อยอาจดูเหมือน “มองไม่เห็น” จนกว่าคุณจะระบุพาธให้ Claude โดยตรง วิธีแก้เรียบง่ายมาก: ระบุพาธที่แน่นอนของไฟล์ให้ Claude หรือขอให้อ่านไฟล์ก่อน แล้ว Claude ก็จะเห็นไฟล์นั้น

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

การทำงานเป็นดังนี้ เมื่อ Claude เริ่มทำงาน จะโหลดสิ่งที่อยู่ในระดับบนสุดของโปรเจกต์ ส่วนไฟล์จากโฟลเดอร์ย่อยจะโหลดตามต้องการ เมื่อ Claude เข้าไปอ่านบางอย่างในนั้น เอกสารอธิบายพฤติกรรมนี้สำหรับไฟล์คำสั่ง และหลักการเดียวกันนี้ใช้กับบริบทโดยทั่วไปด้วย

Claude ค้นพบไฟล์ในโฟลเดอร์ย่อยของไดเรกทอรีทำงาน แทนที่จะโหลดไฟล์เหล่านั้นตอนเริ่มทำงาน Claude จะดึงเข้ามาเมื่ออ่านไฟล์ในโฟลเดอร์ย่อยเหล่านั้น

— Claude Code Docs, จัดการหน่วยความจำของ Claude, เอกสารทางการ

พูดง่าย ๆ คือ ไฟล์ในโฟลเดอร์ย่อยที่อยู่ลึกไม่ได้หายไปไหน และยังเข้าถึงได้เต็มที่ Claude แค่ยังจำไม่ได้เพราะยังไม่ได้เข้าไปดู นี่จึงเป็นเหตุผลที่ทำให้รู้สึกเหมือน Claude “มองไม่เห็น” ไฟล์ ทั้งที่ไฟล์อยู่ตรงนั้นและเข้าถึงได้

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

ไฟล์หายไปจากเมนู @ ตรงไหน และ .gitignore เกี่ยวข้องอย่างไร?

ประเด็นสำคัญ

เมื่อพิมพ์เครื่องหมาย @ Claude Code จะแสดงรายการไฟล์ให้เลือก ตามค่าเริ่มต้น รายการนี้ซ่อนไฟล์ทุกอย่างที่ระบุไว้ใน .gitignore เช่น โฟลเดอร์สำหรับระบบ ไฟล์สภาพแวดล้อม และผลลัพธ์จากการ build ดังนั้นไฟล์อาจอยู่ในตำแหน่งที่ควรอยู่ แต่ไม่ปรากฏในเมนู @ การตั้งค่า respectGitignore เป็นตัวควบคุมเรื่องนี้ โดยเปิดใช้งานตามค่าเริ่มต้นและซ่อนไฟล์เหล่านั้น ตั้งค่าเป็น false แล้วเมนูจะแสดงไฟล์ที่อยู่ใน .gitignore ด้วย คุณสามารถพิมพ์พาธของไฟล์เหล่านี้เองได้ทุกเมื่อ

อีกสาเหตุที่พบบ่อยซึ่งทำให้คิดว่า Claude “ทำไฟล์หาย” คือเครื่องมือเลือกไฟล์ เมื่อพิมพ์ @ รายการจะปรากฏขึ้น ช่วยให้เลือกไฟล์ได้สะดวกโดยไม่ต้องพิมพ์พาธเต็ม แต่รายการนี้ไม่ได้แสดงทุกอย่าง

ตามค่าเริ่มต้น เมนู @ ซ่อนไฟล์ที่ระบุไว้ใน .gitignore ไฟล์นี้กำหนดสิ่งที่ไม่ควรเพิ่มลงใน repository ที่ใช้ร่วมกัน เช่น โฟลเดอร์สำหรับระบบ ไฟล์ที่มีรหัสผ่านและการตั้งค่าสภาพแวดล้อม รวมถึงผลลัพธ์จากการ build ที่เสร็จแล้ว เหตุผลชัดเจน: โดยทั่วไปไม่จำเป็นต้องทำงานกับไฟล์เหล่านี้ด้วยตนเอง การแสดงไฟล์เหล่านี้จึงมีแต่ทำให้รายการรก แต่บางครั้งคุณจำเป็นต้องใช้ไฟล์เหล่านั้นและกลับไม่พบในเมนู

การตั้งค่า respectGitignore เป็นตัวควบคุมเรื่องนี้ โดยเปิดใช้งานตามค่าเริ่มต้น ไฟล์จาก .gitignore จึงไม่ปรากฏในเมนู หากต้องการให้แสดง ให้เปลี่ยนเป็น false:

{
  "respectGitignore": false
}

คุณทำแบบเดียวกันได้โดยไม่ต้องแก้ไฟล์ ด้วยคำสั่ง /config ใน Claude Code สวิตช์นั้นมีชื่อว่า “Respect .gitignore in file picker.” ยกเลิกการเลือก แล้วไฟล์ที่ซ่อนอยู่ก็จะกลับมาแสดงในเมนู

ข้อควรทราบสำคัญ: respectGitignore มีผลเฉพาะกับเมนู @ และไม่เกี่ยวข้องกับการเข้าถึงไฟล์ แม้ไฟล์จะถูกซ่อนจากรายการ คุณก็พิมพ์พาธของไฟล์เองได้ทุกเมื่อ แล้ว Claude จะอ่านไฟล์นั้น เมนูนี้เป็นเพียงเครื่องมืออำนวยความสะดวก ไม่ได้กำหนดขอบเขตการเข้าถึง

ควรทำอย่างไรหาก Claude Code อ่านไฟล์บางไฟล์ไม่ได้?

ประเด็นสำคัญ

บางครั้งโฟลเดอร์ถูกต้องแล้ว แต่ Claude ยังปฏิเสธที่จะอ่านไฟล์ใดไฟล์หนึ่ง โดยทั่วไปสาเหตุมาจากข้อจำกัดในการตั้งค่า ไฟล์ settings.json อาจมีกฎ deny ที่บล็อกการอ่านไฟล์บางรายการ ซึ่งมักเป็นไฟล์ .env ที่มีคีย์และรหัสผ่าน นอกจากนี้ยังมีการตั้งค่าที่บล็อกการอ่านทุกอย่างนอกโฟลเดอร์ทำงาน ตรวจสอบทั้งสองจุดใน settings.json และจำไว้ว่า ข้อจำกัดสำหรับ .env เป็นมาตรการป้องกันที่ตั้งไว้เป็นค่าเริ่มต้น จึงไม่ควรนำออกโดยไม่มีเหตุผลที่ดี

หากแน่ใจว่าโฟลเดอร์ถูกต้องและเปิดสิทธิ์เข้าถึงแล้ว แต่ Claude ยังไม่ยอมอ่านไฟล์ใดไฟล์หนึ่ง ก็มีแนวโน้มสูงว่าไฟล์นั้นถูกจำกัดสิทธิ์ ข้อจำกัดมีอยู่สองชนิดในไฟล์การตั้งค่า settings.json

ชนิดแรกคือข้อจำกัดเฉพาะเจาะจงสำหรับไฟล์บางรายการ ในการตั้งค่า ข้อจำกัดเหล่านี้คือกฎ deny และมักใช้กับไฟล์ .env ซึ่งเก็บคีย์และรหัสผ่านไว้:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}

กฎลักษณะนี้บล็อกไม่ให้ Claude อ่านไฟล์ที่ระบุไว้ ซึ่งเป็นไปโดยตั้งใจ คีย์และรหัสผ่านไม่ควรไปอยู่ในการสนทนากับโมเดล ดังนั้น .env จึงถูกจำกัดไว้ตามค่าเริ่มต้น หากพบว่า Claude ไม่อ่าน .env หรือไฟล์คล้ายกันที่มีข้อมูลลับ นั่นเป็นการทำงานตามที่ออกแบบไว้ และไม่ควรนำข้อจำกัดนี้ออกโดยไม่มีเหตุผลอันสมควร

ชนิดที่สองคือข้อจำกัดทั่วไปสำหรับทุกสิ่งที่อยู่นอกโฟลเดอร์ทำงาน การตั้งค่า blockReadsOutsideWorkingDirectories เป็นตัวควบคุมเรื่องนี้ เมื่อเปิดใช้งาน Claude จะปฏิเสธการอ่านไฟล์ใด ๆ นอกไดเรกทอรีทำงาน แม้คุณจะพยายามเปิดไฟล์นั้นโดยตรง หากตั้งค่าเป็น true และต้องการไฟล์ภายนอก ให้เพิ่มโฟลเดอร์ของไฟล์นั้นด้วย /add-dir หรือปิดข้อจำกัด:

{
  "permissions": {
    "blockReadsOutsideWorkingDirectories": false
  }
}

การตั้งค่านี้เริ่มใช้ในเวอร์ชัน 2.1.257 หากลองทุกวิธีแล้วแต่ไฟล์ยังเข้าไม่ถึง ก็ควรตรวจสอบทั้ง deny และ blockReadsOutsideWorkingDirectories

ควรเริ่มจากตรงไหนหาก Claude Code มองไม่เห็นไฟล์?

ประเด็นสำคัญ

เริ่มจากตรวจสอบโฟลเดอร์: ขอให้ Claude แสดงไดเรกทอรีปัจจุบันด้วย pwd แล้วเปรียบเทียบกับตำแหน่งของโปรเจกต์ หากไม่ตรงกัน ให้เปิด Claude ใหม่จากโฟลเดอร์โปรเจกต์หรือย้ายไปที่นั่นด้วย /cd ต้องการไฟล์จากโฟลเดอร์ข้างเคียงใช่ไหม? เปิดสิทธิ์ด้วย /add-dir มองไม่เห็นไฟล์ในโฟลเดอร์ย่อยใช่ไหม? ระบุพาธให้ Claude โดยตรง ไฟล์ไม่ปรากฏในเมนู @ ใช่ไหม? เกี่ยวข้องกับ .gitignore — เปลี่ยน respectGitignore ไฟล์เดียวถูกล็อกใช่ไหม? ตรวจหาข้อจำกัด deny ใน settings.json

นี่คือแผนสั้น ๆ ที่ทำตามได้จากข้อแรกไปจนถึงข้อสุดท้าย

  1. ตรวจสอบโฟลเดอร์ทำงาน: ขอให้ Claude แสดงไดเรกทอรีปัจจุบันด้วย pwd แล้วเปรียบเทียบกับตำแหน่งของโปรเจกต์
  2. หากโฟลเดอร์ไม่ตรงกัน ให้เปิด Claude ใหม่จากโฟลเดอร์ที่ถูกต้อง (cd project แล้วตามด้วย claude) หรือย้ายไปที่นั่นด้วยคำสั่ง /cd
  3. ต้องการไฟล์จากโฟลเดอร์ข้างเคียงใช่ไหม? เพิ่มโฟลเดอร์นั้นด้วย /add-dir หรือแฟล็ก --add-dir ตอนเปิด Claude
  4. ไฟล์ในโฟลเดอร์ย่อยไม่อยู่ในบริบทใช่ไหม? ระบุพาธให้ Claude โดยตรงหรือขอให้อ่านไฟล์
  5. ไฟล์ไม่ปรากฏในเมนู @ ใช่ไหม? เป็นเพราะ .gitignore ตั้งค่า respectGitignore เป็น false หรือยกเลิกการเลือกช่องใน /config
  6. ไฟล์หนึ่งไฟล์ถูกล็อกใช่ไหม? ตรวจสอบกฎ deny และ blockReadsOutsideWorkingDirectories ใน settings.json

เก้าในสิบกรณี ขั้นตอนแรกก็แก้ปัญหาได้ทั้งหมด: Claude เปิดจากโฟลเดอร์ผิด การเข้าถึงไฟล์เป็นพื้นฐาน แต่ไม่ได้สร้างโปรเจกต์ให้คุณ ฉันอธิบายโดยละเอียดแล้วว่าจะสร้างบริบทรอบ Claude อย่างไร เพื่อให้ Claude จดจำโปรเจกต์ทั้งหมดและไม่หลุดประเด็น ในคู่มือของฉันเรื่อง Second Brain ใน Claude Code

แหล่งที่มา

ดูเนื้อหาเพิ่มเติมเกี่ยวกับการทำงานกับเครื่องมือได้ในเอกสารของ Ailoot

รายละเอียดเพิ่มเติม

คำถามที่พบบ่อย

เริ่มจาก home ต่างจากเริ่มในโปรเจกต์ข้างเคียงอย่างไร?

โปรเจกต์ใต้ home เป็นลูก การเริ่มจาก home จึงไม่ทำให้อยู่นอก working tree แต่ให้บริบทกว้างเกินตั้งใจ ส่วนโฟลเดอร์ข้างเคียงของที่ทำงานอยู่นอกขอบเขต เทียบ path เต็มก่อนวินิจฉัยสิทธิ์หาย

เข้าถึงโฟลเดอร์ลูกได้แปลว่าไฟล์อยู่ในบริบทแล้วหรือไม่?

ไม่ใช่ ให้ path ไฟล์และขอให้อ่าน หากถูกปฏิเสธให้ตรวจสิทธิ์ที่ใช้ ไฟล์ไม่อยู่ในเมนูเลือกกับการอ่านถูกปฏิเสธเป็นคนละปัญหา

บทความทั้งหมด