Documents Directory: คืออะไร วัตถุประสงค์ และการเข้าถึงไฟล์

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-10 เวลาอ่าน: 10 นาที

Documents Directory คือไดเรกทอรีในแซนด์บ็อกซ์ของแอป iOS ที่ออกแบบมาเพื่อจัดเก็บข้อมูลผู้ใช้ที่ควรคงอยู่ระหว่างเซสชันการทำงานของแอปและสามารถเข้าถึงได้โดยผู้ใช้ผ่าน iTunes File Sharing และ iCloud ตาม Apple File System Programming Guide (2024) เนื้อหาของไดเรกทอรีนี้จะถูกรวมอยู่ในการสำรองข้อมูล iCloud และ iTunes โดยอัตโนมัติ ดังนั้นนักพัฒนาจึงต้องเลือกอย่างมีสติว่าข้อมูลใดจะวางใน Documents แตกต่างจาก Caches Directory ไฟล์ใน Documents จะไม่ถูกลบโดยระบบเมื่อพื้นที่ไม่เพียงพอ — ความรับผิดชอบในการจัดการขนาดตกอยู่ที่แอปพลิเคชัน

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

  • Documents Directory คือไดเรกทอรีหลักสำหรับไฟล์ผู้ใช้ที่ควรคงอยู่และสามารถเข้าถึงได้ผ่าน iTunes
  • ข้อมูลจาก Documents จะถูก สำรองข้อมูลโดยอัตโนมัติ ไปยัง iCloud และ iTunes — พิจารณาสิ่งนี้เมื่อออกแบบพื้นที่จัดเก็บของคุณ
  • ระบบ จะไม่ลบ ไฟล์จาก Documents เมื่อล้างแคช — นักพัฒนามีหน้าที่รับผิดชอบในการเพิ่มพื้นที่ว่าง
  • พาธไปยังไดเรกทอรีได้รับผ่าน NSSearchPathForDirectoriesInDomains ด้วย NSDocumentDirectory หรือผ่าน FileManager.urls
  • สำหรับไฟล์ขนาดใหญ่ที่สามารถกู้คืนได้ ให้ใช้ Caches Directory — เพื่อไม่ให้เปลืองพื้นที่ในการสำรองข้อมูล iCloud

Documents Directory ใน iOS คืออะไร?

Documents Directory คือไดเรกทอรีภายในแซนด์บ็อกซ์ของแอป iOS ที่ออกแบบมาเพื่อจัดเก็บข้อมูลผู้ใช้ที่ควรคงอยู่ระหว่างการเปิดใช้งานและสามารถเข้าถึงได้โดยผู้ใช้ แต่ละแอปได้รับแซนด์บ็อกซ์ที่แยกเป็นสัดส่วนของตัวเอง และ Documents เป็นหนึ่งในไดเรกทอรีหลักควบคู่ไปกับ Caches, tmp และ Library

iOS ใช้ แซนด์บ็อกซ์ ที่เข้มงวด: แอปไม่สามารถเข้าถึงระบบไฟล์ของแอปอื่นหรือไดเรกทอรีระบบได้หากไม่ได้รับอนุญาตพิเศษ Documents Directory เป็นไดเรกทอรีเดียวที่ผู้ใช้สามารถดูเนื้อหาผ่าน iTunes File Sharing (เมื่อเปิดใช้คีย์ UIFileSharingEnabled ใน Info.plist)

ตาม Apple WWDC 2023 แอปมากกว่า 85% ใน App Store ใช้ Documents Directory เพื่อจัดเก็บข้อมูลผู้ใช้อย่างน้อยหนึ่งประเภท — ตั้งแต่ PDF ที่ส่งออกไปจนถึงไฟล์เกมที่บันทึกไว้และรูปภาพที่ส่งออก

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

วิธีการรับพาธไปยัง Documents Directory

ใน Swift พาธไปยัง Documents Directory ได้รับผ่าน FileManager Apple แนะนำให้ใช้ API ที่ใช้ URL แทนที่จะใช้สตริงเพื่อความเข้ากันได้ดีขึ้นกับความสามารถสมัยใหม่ของ iOS

swift
import Foundation

let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

// สร้างไฟล์ใน Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

Objective-C ใช้ NSSearchPathForDirectoriesInDomains — วิธีการที่เก่ากว่าแต่ยังคงรองรับ ซึ่งส่งคืนพาธแบบสตริงแทน URL

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory,
    NSUserDomainMask,
    YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];

โปรเจกต์สมัยใหม่ใน Swift ควรใช้ FileManager.urls เนื่องจากวิธีการนี้ส่งคืน URL แทนที่จะเป็นสตริง ซึ่งช่วยลดความเสี่ยงของข้อผิดพลาดในการเข้ารหัสพาธและทำให้โค้ดปลอดภัยต่อชนิดมากขึ้น

ข้อมูลใดที่ควรจัดเก็บใน Documents

Documents Directory มีไว้สำหรับข้อมูลที่สร้างโดยผู้ใช้หรือที่ผู้ใช้ต้องการอย่างชัดเจน Apple เน้นหลายหมวดหมู่ที่เหมาะสมสำหรับไดเรกทอรีนี้

เอกสารและไฟล์ผู้ใช้

ไฟล์ ที่ผู้ใช้สร้างหรือนำเข้า — เอกสารข้อความ, PDF, รูปภาพ, รายงานที่ส่งออก, ไฟล์สำรองข้อมูล ข้อมูลนี้มีค่าโดยตรงต่อผู้ใช้และการสูญเสียข้อมูลนั้นจะร้ายแรง

การบันทึกเกมและสถานะแอป

การบันทึก เกม, ไฟล์สถานะแอป, โปรเจกต์ที่ส่งออก — ทุกสิ่งที่ผู้ใช้คาดหวังจะกู้คืนหลังจากติดตั้งแอปใหม่ อย่างไรก็ตาม สำหรับข้อมูลที่สำคัญ แนะนำให้ใช้ iCloud Key-Value Storage หรือ Core Data ที่มีการซิงค์ iCloud เพิ่มเติม

ประเภทข้อมูลเหมาะสมสำหรับ Documentsทางเลือก
PDF และเอกสารข้อความใช่
แคช รูปภาพไม่Caches Directory
การบันทึก เกมใช่iCloud KVS
บันทึก และข้อมูลดีบักไม่Caches หรือ tmp
รายงาน ที่ส่งออกใช่

เกณฑ์สำคัญ: หากข้อมูลสามารถดาวน์โหลดซ้ำจากเครือข่ายหรือสร้างใหม่ได้ — ข้อมูลนั้นควรอยู่ใน Caches ไม่ใช่ Documents ทุกกิกะไบต์ใน Documents คือกิกะไบต์ในการสำรองข้อมูล iCloud ของผู้ใช้

การสำรองข้อมูลและการซิงโครไนซ์

iOS จะรวมเนื้อหาของ Documents Directory ในการสำรองข้อมูลโดยอัตโนมัติเมื่ออุปกรณ์เชื่อมต่อกับ iTunes หรือเมื่อซิงค์กับ iCloud พฤติกรรมนี้ไม่สามารถปิดใช้งานในระดับไดเรกทอรีได้ — ทำได้เฉพาะไฟล์ต่อไฟล์ผ่านแอตทริบิวต์ NSURLIsExcludedFromBackupKey

เริ่มจาก iOS 5.0 Apple เริ่มปฏิเสธแอปที่จัดเก็บข้อมูลที่สามารถกู้คืนได้ปริมาณมากใน Documents คำแนะนำของ Apple: ไฟล์ที่สามารถดาวน์โหลดซ้ำได้ควรเก็บไว้ใน Caches Directory โดยมีแฟล็กยกเว้นการสำรองข้อมูล

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

// ยกเว้นไฟล์จากการสำรองข้อมูล iCloud
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)

การซิงค์ iCloud ทำงานผ่าน NSUbiquitousContainer หากแอปใช้ iCloud Documents ในกรณีนี้ ไฟล์จาก Documents Directory จะถูกซิงค์โดยอัตโนมัติระหว่างอุปกรณ์ของผู้ใช้ สำหรับแอปที่ไม่มี iCloud การซิงค์จะจำกัดเฉพาะการสำรองข้อมูล

Documents Directory เทียบกับ Caches Directory

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

คุณลักษณะDocuments DirectoryCaches Directory
การสำรอง ข้อมูล iCloudใช่ (โดยค่าเริ่มต้น)ไม่
การลบ โดยระบบไม่เคยเมื่อพื้นที่ไม่เพียงพอ
iTunes File Sharingใช่ (เมื่อเปิดใช้แฟล็ก)ไม่
วัตถุประสงค์ข้อมูลผู้ใช้แคช, ข้อมูลชั่วคราว
การกู้คืน ข้อมูลต้องการการคืนค่าสามารถดาวน์โหลดซ้ำได้

ตาม เอกสารสำหรับนักพัฒนา Apple (2024) การใช้ Documents Directory อย่างไม่เหมาะสมเป็นหนึ่งในสาเหตุทั่วไปของการปฏิเสธแอประหว่างการตรวจสอบ: หากแอปจัดเก็บข้อมูลที่สามารถกู้คืนได้มากกว่าสองสามเมกะไบต์ใน Documents Apple แนะนำให้ย้ายไปยัง Caches หรือใช้ NSURLIsExcludedFromBackupKey

กฎที่ใช้งานได้จริง: หากผู้ใช้จะเสียใจเมื่อสูญเสียไฟล์ — เก็บไว้ใน Documents หากไฟล์สามารถดาวน์โหลดซ้ำหรือสร้างใหม่ได้ — เก็บไว้ใน Caches

แนวทางปฏิบัติที่ดีที่สุดสำหรับการทำงานกับ Documents

นักพัฒนา iOS ที่มีประสบการณ์ได้พัฒนากฎหลายข้อที่ช่วยหลีกเลี่ยงปัญหากับ Documents Directory ในทุกขั้นตอนของวงจรชีวิตแอป — ตั้งแต่การพัฒนาไปจนถึงการเผยแพร่ใน App Store

การตรวจสอบขนาดไดเรกทอรี

เป็นประจำ ตรวจสอบขนาดของ Documents Directory ผ่าน FileManager.enumerator(at:includingPropertiesForKeys:) หากขนาดเกิน 100 MB สำหรับข้อมูลที่ไม่ใช่ของผู้ใช้ — นั่นเป็นเหตุผลที่ต้องพิจารณาสถาปัตยกรรมการจัดเก็บใหม่

การยกเว้นไฟล์ที่กู้คืนได้จากการสำรองข้อมูล

สำหรับไฟล์ใด ๆ ที่สามารถดาวน์โหลดซ้ำได้ ให้ตั้งค่า isExcludedFromBackup = true ซึ่งจะลดภาระบนพื้นที่จัดเก็บ iCloud ของผู้ใช้และลดความเสี่ยงของการปฏิเสธโดย App Review

การย้ายข้อมูลระหว่างการอัปเดต

เมื่อเปลี่ยนรูปแบบข้อมูลใน Documents ให้วางแผนการย้ายข้อมูล: อย่าลบไฟล์เก่าจนกว่าจะแน่ใจว่าไฟล์ใหม่ถูกสร้างขึ้นอย่างถูกต้อง ใช้ไดเรกทอรีย่อยเฉพาะเวอร์ชัน

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
    at: versionDir,
    withIntermediateDirectories: true
)

การปฏิบัติตามแนวทางเหล่านี้ช่วยลดความเสี่ยงของการสูญเสียข้อมูลผู้ใช้ ลดขนาดการสำรองข้อมูล iCloud และทำให้การตรวจสอบ App Store ง่ายขึ้น

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

ผู้ใช้สามารถเข้าถึง Documents Directory โดยไม่ต้องใช้ iTunes ได้หรือไม่?

ได้ ผ่าน Files — แอปในตัวของ iOS ตั้งแต่เวอร์ชัน 11 เมื่อเปิดใช้คีย์ UIFileSharingEnabled ใน Info.plist เนื้อหาของ Documents Directory จะปรากฏในแอปไฟล์ในส่วน "บน iPhone ของฉัน" ผู้ใช้สามารถดู คัดลอก และลบไฟล์ได้

จะเกิดอะไรขึ้นกับ Documents Directory เมื่อลบแอป?

แซนด์บ็อกซ์ ทั้งหมดของแอป รวมถึง Documents Directory, Caches, tmp และ Library จะถูกลบออกจากอุปกรณ์อย่างสมบูรณ์ การสำรองข้อมูลใน iCloud จะถูกเก็บไว้จนกว่าจะกู้คืนหรือลบด้วยตนเอง เมื่อติดตั้งใหม่ แอปจะเริ่มต้นด้วยแซนด์บ็อกซ์ที่สะอาด

จะตรวจสอบขนาดของ Documents Directory ในโค้ดได้อย่างไร?

ใช้ FileManager.enumerator เพื่อสำรวจไฟล์ทั้งหมดในไดเรกทอรีและรวมขนาดของไฟล์เหล่านั้น สำหรับแต่ละไฟล์ ให้รับแอตทริบิวต์ .fileSize ผ่าน resourceValues(forKeys:) หรือใช้ URLResourceKey.fileSizeKey และ .directoryEnumerationResults

ฉันสามารถจัดเก็บฐานข้อมูล Core Data SQLite ใน Documents ได้หรือไม่?

โดยค่าเริ่มต้น Core Data จะสร้างไฟล์ SQLite ใน Library/Application Support ไม่ใช่ใน Documents ไม่แนะนำให้ย้ายฐานข้อมูลไปยัง Documents — ฐานข้อมูลจะถูกรวมใน iTunes File Sharing และผู้ใช้สามารถลบหรือแก้ไขโดยไม่ตั้งใจได้ ข้อยกเว้นคือหากแอปให้ผู้ใช้เข้าถึงข้อมูลอย่างชัดเจนผ่าน Core Data

UIFileSharingEnabled คืออะไรและจะเปิดใช้อย่างไร?

UIFileSharingEnabled (Application supports iTunes file sharing) คือคีย์บูลีนใน Info.plist เมื่อตั้งค่าเป็น YES ผู้ใช้สามารถคัดลอกไฟล์จาก Documents Directory ผ่าน iTunes และ Files เพิ่มคีย์ใน Info.plist: UIFileSharingEnabled = YES เปิดใช้เฉพาะเมื่อแอปสร้างเอกสารผู้ใช้จริง ๆ

สรุป

  • Documents Directory คือตำแหน่งหลักสำหรับข้อมูลผู้ใช้ในแอป iOS ที่ควรคงอยู่และสำรองข้อมูล
  • พาธไปยังไดเรกทอรีได้รับผ่าน FileManager.urls(for: .documentDirectory) ใน Swift หรือ NSSearchPathForDirectoriesInDomains ใน Objective-C
  • ไฟล์ทั้งหมดจาก Documents จะ ถูกรวม ในการสำรองข้อมูล iCloud และ iTunes โดยค่าเริ่มต้น — ใช้ isExcludedFromBackup สำหรับการยกเว้น
  • ระบบ จะไม่ลบ ไฟล์จาก Documents โดยอัตโนมัติ แตกต่างจาก Caches Directory
  • สำหรับข้อมูลที่กู้คืนได้ (แคช, ไฟล์ชั่วคราว) ให้ใช้ Caches Directory ไม่ใช่ Documents
  • คีย์ UIFileSharingEnabled ให้การเข้าถึง Documents ผ่าน iTunes และแอปไฟล์ — ใช้อย่างมีสติ
  • ตรวจสอบเป็นประจำ ขนาดของ Documents Directory: การเกิน 100 MB สำหรับข้อมูลที่ไม่สำคัญคือปัญหาทางสถาปัตยกรรม

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม