دایرکتوری اسناد در برنامه موبایل — چیست، هدف و نحوه سازماندهی ذخیره‌سازی

نویسنده: IT Sectr منتشر شده: 2026-03-14 زمان مطالعه: 10 دقیقه

دایرکتوری اسناد برنامه، محل ذخیره‌سازی دائمی فایل‌های کاربر است که باید بین جلسات حفظ شده و از پشتیبان بازیابی شوند. بر اساس Apple File System Programming Guide, 2026، در iOS دایرکتوری Documents به طور خودکار در پشتیبان‌گیری iCloud گنجانده می‌شود، برخلاف کش و دایرکتوری‌های موقت. استفاده صحیح از دایرکتوری اسناد تضمین می‌کند که فایل‌های کاربر در هنگام به‌روزرسانی یا نصب مجدد برنامه از دست نروند.

نکات اصلی

  • Documents Directory — محل ذخیره‌سازی دائمی فایل‌های کاربر که در هنگام به‌روزرسانی و بازیابی از پشتیبان حفظ می‌شوند
  • iOS به طور خودکار Documents را در پشتیبان‌گیری iCloud و iTunes قرار می‌دهد — فقط داده‌های قابل بازتولید را از آن حذف کنید
  • Android دایرکتوری جداگانه‌ای برای Documents ندارد — معادل آن context.filesDir با مدیریت دستی پشتیبان‌گیری است
  • ذخیره خودکار و نسخه‌بندی فایل‌ها از از دست رفتن داده‌ها در هنگام خرابی و بازنویسی تصادفی جلوگیری می‌کند
  • مهاجرت داده‌ها در هنگام به‌روزرسانی نسخه برنامه برای جلوگیری از از دست رفتن تنظیمات و فایل‌های کاربر الزامی است

دایرکتوری اسناد برنامه چیست؟

دایرکتوری اسناد — یک فضای ذخیره‌سازی تخصصی در داخل سندباکس برنامه است که برای ذخیره‌سازی دائمی فایل‌های کاربر طراحی شده است. برخلاف کش، فایل‌های موجود در این دایرکتوری برای کاربر مهم تلقی می‌شوند: در صورت کمبود فضا توسط سیستم حذف نمی‌شوند، در هنگام به‌روزرسانی برنامه حفظ می‌شوند و در هنگام همگام‌سازی دستگاه پشتیبان‌گیری می‌شوند. در iOS، دایرکتوری Documents بخشی از کانتینر Sandbox است و به طور خودکار در پشتیبان‌گیری iCloud گنجانده می‌شود. در Android معادل مستقیمی وجود ندارد — معادل آن context.filesDir است که برای فایل‌های دائمی در نظر گرفته شده است اما مکانیزم داخلی پشتیبان‌گیری ندارد.

تفاوت بین دایرکتوری اسناد و ذخیره‌سازی داخلی (Internal Storage) در Android حداقل است: هر دو در سندباکس برنامه قرار دارند، هر دو در هنگام حذف نصب پاک می‌شوند، هر دو برای سایر برنامه‌ها غیرقابل دسترسی هستند. تفاوت اصلی معنایی است: Documents Directory فرض می‌کند که فایل‌ها توسط کاربر ایجاد یا وارد شده‌اند، در حالی که Internal Storage ممکن است حاوی فایل‌های داخلی برنامه (پایگاه‌های داده، تنظیمات) باشد. در iOS تفاوت قابل توجه‌تر است: Documents به طور خودکار پشتیبان‌گیری می‌شود، اما Library/Application Support نه. این بر استراتژی ذخیره‌سازی تأثیر می‌گذارد: در Documents فقط مواردی را قرار دهید که کاربر می‌خواهد در دستگاه جدید بازیابی کند، و در Application Support — داده‌های داخلی که برنامه می‌تواند بازتولید کند.

معماری سندباکس تضمین می‌کند که سایر برنامه‌ها به دایرکتوری اسناد برنامه شما دسترسی ندارند. در iOS دسترسی به Documents سایر برنامه‌ها بدون jailbreak غیرممکن است. در Android دسترسی روت به خواندن filesDir هر برنامه‌ای اجازه می‌دهد، بنابراین داده‌های محرمانه (توکن‌ها، کلیدهای رمزنگاری) باید با استفاده از EncryptedSharedPreferences یا EncryptedFile از کتابخانه AndroidX Security محافظت بیشتری شوند.

چه داده‌هایی در دایرکتوری اسناد ذخیره می‌شوند

در دایرکتوری اسناد باید داده‌هایی قرار داده شوند که برای کاربر ارزش دارند و باید پس از راه‌اندازی مجدد برنامه یا بازیابی دستگاه در دسترس باشند. همه فایل‌ها برای ذخیره در این دایرکتوری مناسب نیستند — انتخاب بستگی به نوع داده و سناریوی استفاده دارد.

اسناد و فایل‌های کاربر

فایل‌های کاربر — محتوای اصلی دایرکتوری اسناد. اینها می‌توانند اسناد متنی ایجاد شده در ویرایشگر، تصاویر گرفته شده با دوربین برنامه، گزارش‌های PDF صادر شده، ضبط‌های صوتی، یادداشت‌ها باشند. هر یک از این فایل‌ها توسط کاربر یا به درخواست او ایجاد شده است و باید در هر لحظه در دسترس باشد. در iOS فایل‌های موجود در Documents در برنامه سیستم Files نمایش داده می‌شوند که به کاربر اجازه می‌دهد از طریق مدیر فایل استاندارد آنها را مدیریت کند. در Android نمایش مشابهی وجود ندارد — برنامه باید خودش رابطی برای مشاهده فایل‌های ذخیره شده فراهم کند.

پایگاه‌های داده و تنظیمات برنامه

پایگاه‌های داده SQLite و فایل‌های تنظیمات معمولاً در کنار دایرکتوری اسناد ذخیره می‌شوند، اما در داخل آن نه. در iOS پایگاه‌های داده در Library/Application Support قرار می‌گیرند، زیرا نباید در برنامه Files نمایش داده شوند و جداگانه پشتیبان‌گیری شوند. در Android پایگاه‌های داده به طور پیش‌فرض از طریق Room یا SQLiteOpenHelper در /data/data/<package>/databases/ ایجاد می‌شوند. اگر پایگاه داده حاوی محتوای کاربر (یادداشت‌ها، دفترچه خاطرات، سوابق مالی) باشد، می‌توان آن را در filesDir قرار داد تا پشتیبان‌گیری از طریق سیستم انجام شود. Room اجازه می‌دهد دایرکتوری سفارشی برای ذخیره پایگاه داده از طریق callback RoomDatabase.Builder تعیین شود.

kotlin
val dbFile = File(context.filesDir, "user_database.db")

val db = Room.databaseBuilder<AppDatabase>(
    context,
    dbFile.absolutePath
).build()

داده‌های صادر و وارد شده

فایل‌هایی که کاربر از برنامه‌های دیگر وارد می‌کند یا از برنامه شما صادر می‌کند، نیز باید در دایرکتوری اسناد ذخیره شوند. در iOS وارد کردن از طریق UIDocumentPickerViewController با استفاده از پارامتر asCopy: true به طور خودکار یک کپی از فایل را در Documents قرار می‌دهد. در Android وارد کردن از طریق دیالوگ SAF نیز یک کپی از فایل را در سندباکس برنامه ایجاد می‌کند. هنگام صدور داده‌ها (به عنوان مثال، ایجاد فایل CSV با مخاطبان)، ابتدا فایل را در Documents/filesDir ذخیره کنید، سپس از کاربر بخواهید آن را از طریق Share Sheet به اشتراک بگذارد. این تضمین می‌کند که حتی اگر کاربر فراموش کند فایل را پس از ارسال ذخیره کند، یک کپی در برنامه برای استفاده بعدی باقی می‌ماند.

نحوه کار با دایرکتوری اسناد در Android

در Android عملکرد دایرکتوری اسناد توسط context.filesDir انجام می‌شود. علاوه بر این، دایرکتوری context.externalFilesDir در کارت SD در دسترس است، اما حفظ داده‌ها را تضمین نمی‌کند. بیایید روش‌های اصلی کار با این دایرکتوری‌ها را بررسی کنیم.

دسترسی و مدیریت فایل‌ها از طریق filesDir

filesDir — دایرکتوری اصلی برای فایل‌های دائمی برنامه در Android است. در سندباکس برنامه قرار دارد و در هنگام حذف نصب به طور کامل حذف می‌شود. برای دریافت نمونه File از context.filesDir استفاده کنید که مسیر دایرکتوری /data/data/<package>/files/ را برمی‌گرداند. برای ایجاد و خواندن فایل‌ها از عملیات استاندارد File در Java/Kotlin یا متدهای Context openFileInput() و openFileOutput() استفاده کنید که نام فایل را دریافت کرده و FileInputStream/FileOutputStream برمی‌گردانند. متد openFileOutput() اگر فایل هنوز وجود نداشته باشد، به طور خودکار آن را در filesDir ایجاد می‌کند و اجازه می‌دهد حالت دسترسی را مشخص کنید: MODE_PRIVATE (فقط برنامه فعلی)، MODE_APPEND (افزودن) یا MODE_WORLD_READABLE (منسوخ شده، از API 24+ استفاده نمی‌شود).

kotlin
val fileName = "report.pdf"
val content = "PDF content".toByteArray()

context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
    stream.write(content)
}

val bytes = context.openFileInput(fileName).use { stream ->
    stream.readBytes()
}

ویژگی‌های ذخیره‌سازی در Android 10+

در Android 10+ مدل Scoped Storage روی filesDir تأثیری ندارد — دسترسی به سندباکس خود برنامه کاملاً باقی می‌ماند. تمام عملیات خواندن و نوشتن در داخل filesDir به مجوزهای اضافی نیاز ندارند. با این حال، هنگام تلاش برای دسترسی به فایل‌های برنامه دیگر از طریق filesDir یک استثنا دریافت خواهید کرد. برای تبادل فایل از FileProvider استفاده کنید که یک content URI موقت برای ارسال فایل به برنامه دیگر ایجاد می‌کند. FileProvider در AndroidManifest.xml از طریق تگ <provider> اعلام می‌شود و در فایل XML مسیرها پیکربندی می‌شود. این یک مکانیزم استاندارد برای انتقال فایل‌ها بین برنامه‌ها است که به عنوان مثال هنگام ارسال تصویر از طریق Intent با ACTION_SEND استفاده می‌شود.

نحوه کار با دایرکتوری اسناد در iOS

در iOS Documents Directory بخشی از کانتینر Sandbox برنامه با وضعیت ویژه است. فایل‌های این دایرکتوری به طور خودکار در پشتیبان‌گیری iCloud گنجانده می‌شوند، در برنامه Files نمایش داده می‌شوند و در هنگام به‌روزرسانی برنامه از طریق App Store حفظ می‌شوند.

Documents Directory و پشتیبان‌گیری

پشتیبان‌گیری خودکار Documents — مزیت کلیدی iOS است. وقتی کاربر دستگاه را به iTunes متصل می‌کند یا iCloud Backup را فعال می‌کند، تمام فایل‌های Documents/ در پشتیبان کپی می‌شوند. هنگام بازیابی در دستگاه جدید، کاربر تمام فایل‌های خود را بدون اقدام اضافی دریافت می‌کند. با این حال، این مزیت زمانی به نقطه ضعف تبدیل می‌شود که برنامه حجم زیادی از داده را در Documents ذخیره کند: زمان پشتیبان‌گیری افزایش می‌یابد و فضای iCloud ممکن است به سرعت تمام شود. بنابراین در Documents باید فقط فایل‌هایی را ذخیره کرد که واقعاً در هنگام بازیابی به کاربر نیاز هستند. فایل‌های موقت، کش و داده‌های قابل بازتولید باید در Caches یا Library/Application Support باشند. Apple توصیه می‌کند فایل‌هایی را که می‌توان از اینترنت دوباره دانلود کرد، از طریق ویژگی isExcludedFromBackup از پشتیبان‌گیری حذف کنید.

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

let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "محتوای یادداشت"
try text.write(to: fileURL, atomically: true, encoding: .utf8)

iCloud Drive و همگام‌سازی بین دستگاه‌ها

iCloud Drive امکان همگام‌سازی فایل‌های Documents را بین دستگاه‌های یک کاربر فراهم می‌کند. برای فعال‌سازی همگام‌سازی، برنامه باید از API NSDocument یا UIDocument استفاده کند که به طور خودکار نسخه‌بندی و حل تعارضات را مدیریت می‌کنند. رویکرد جایگزین — استفاده از iCloud با CloudKit که کنترل انعطاف‌پذیرتری بر همگام‌سازی فراهم می‌کند اما نیاز به پیکربندی در CloudKit Dashboard دارد. هنگام استفاده از iCloud Drive مطمئن شوید که تعارضات ویرایش را به درستی مدیریت می‌کنید (merge یا last-write-wins) و کاربر را از وضعیت همگام‌سازی از طریق رابط برنامه مطلع می‌کنید. iCloud همگام‌سازی فوری را تضمین نمی‌کند — تأخیر می‌تواند از چند ثانیه تا چند دقیقه بسته به اندازه فایل و کیفیت اتصال متغیر باشد. برای داده‌های حیاتی از نوشتن تراکنشی و نسخه‌بندی استفاده کنید تا در صورت تعارض بتوان نسخه قبلی فایل را بازیابی کرد.

تفاوت‌ها با Cache Directory و بهترین روش‌ها

انتخاب صحیح بین Documents Directory و Cache Directory قابلیت اطمینان ذخیره‌سازی داده‌های کاربر را تعیین می‌کند. اشتباه در انتخاب منجر به از دست رفتن داده‌ها (اگر فایل‌های مهم در کش ذخیره شوند) یا پر شدن پشتیبان (اگر فایل‌های موقت در Documents ذخیره شوند) می‌شود.

معیارDocuments DirectoryCache Directory
تضمین حفظبالا — توسط سیستم حذف نمی‌شودکم — ممکن است پاک شود
پشتیبان‌گیری (iOS)به طور خودکار در iCloudپشتیبان‌گیری نمی‌شود
قابلیت مشاهده کاربر (iOS)در برنامه Filesمخفی
پاک شدن در به‌روزرسانیپاک نمی‌شودممکن است پاک شود
اندازه توصیه شدههر اندازه، اما با کنترل از طریق تنظیماتتا 100–200 مگابایت
نوع دادهفایل‌های کاربرداده‌های موقت قابل بازتولید

بهترین روش‌ها استفاده از دایرکتوری اسناد شامل چندین قانون کلیدی است. اول، همیشه قبل از حذف فایل‌ها از این دایرکتوری تأیید کاربر را دریافت کنید. برخلاف کش، حذف یک سند می‌تواند منجر به از دست رفتن غیرقابل بازگشت محتوای کاربر شود. دوم، نسخه‌بندی فایل‌ها را پیاده‌سازی کنید: هنگام بازنویسی فایل موجود، نسخه قبلی را با پسوند _backup ذخیره کنید یا از مکانیزم‌های Snapshot استفاده کنید. سوم، به کاربر رابطی برای مشاهده، تغییر نام، حذف و صدور فایل‌ها از دایرکتوری اسناد ارائه دهید. در iOS فایل‌های Documents به طور خودکار در Files نمایش داده می‌شوند، در Android باید مدیر فایل خود را پیاده‌سازی کنید یا از کتابخانه‌های شخص ثالث استفاده کنید.

به مهاجرت داده‌ها در هنگام به‌روزرسانی برنامه توجه ویژه کنید. اگر نسخه جدید ساختار ذخیره‌سازی فایل را تغییر می‌دهد (مثلاً داده‌ها را از یک زیردایرکتوری به زیردایرکتوری دیگر منتقل می‌کند یا فرمت فایل را تغییر می‌دهد)، یک مهاجرت یکباره در اولین راه‌اندازی پس از به‌روزرسانی پیاده‌سازی کنید. شماره نسخه طرح داده را در SharedPreferences ذخیره کنید و در صورت عدم تطابق، مهاجرت را آغاز کنید. فایل‌های قدیمی را تا پایان مهاجرت حذف نکنید — در صورت خرابی، کاربر نباید داده‌ها را از دست بدهد. اگر مهاجرت شامل تبدیل فرمت (مثلاً انتقال از JSON به SQLite) باشد، فایل‌های اصلی را به عنوان پشتیبان در یک دایرکتوری جداگانه با تاریخ مهاجرت ذخیره کنید. کاربر باید بتواند از طریق تنظیمات برنامه در 30 روز اول پس از به‌روزرسانی تغییرات را بازگرداند، همانطور که Apple Human Interface Guidelines توصیه می‌کند.

سوالات متداول

تفاوت بین Documents و Library/Application Support در iOS چیست؟

Documents در برنامه Files نمایش داده می‌شود و به طور خودکار در iCloud پشتیبان‌گیری می‌شود. Application Support در Files نمایش داده نمی‌شود و به طور پیش‌فرض پشتیبان‌گیری نمی‌شود. برای داده‌های داخلی برنامه که نیازی به نمایش به کاربر ندارند، Application Support را انتخاب کنید.

آیا هنگام حذف حساب باید دایرکتوری اسناد را پاک کرد؟

بله، هنگام حذف حساب به کاربر پیشنهاد دهید تمام فایل‌های محلی مرتبط با این حساب را پاک کند. یک دیالوگ با سوال «آیا همه داده‌های محلی حذف شوند؟» نشان دهید و فهرست کنید کدام فایل‌ها تحت تأثیر قرار می‌گیرند. این الزام GDPR و انطباق با سیاست‌های App Store و Google Play است.

چگونه فایل‌ها را از دایرکتوری اسناد به دستگاه جدید منتقل کنیم؟

در iOS کافی است دستگاه را از پشتیبان iCloud یا iTunes بازیابی کنید — فایل‌های Documents به طور خودکار بازیابی می‌شوند. در Android از Google Drive Backup API برای پشتیبان‌گیری از فایل‌های filesDir استفاده کنید یا صدور از طریق سرویس ابری را پیاده‌سازی کنید.

آیا کاربر می‌تواند به طور تصادفی فایل‌ها را از دایرکتوری اسناد حذف کند؟

در iOS کاربر می‌تواند از طریق برنامه Files فایل‌ها را حذف کند. در Android حذف فقط از طریق رابط برنامه شما امکان‌پذیر است. توصیه می‌شود یک سطل زباله برای اسناد با قابلیت بازیابی تا 30 روز پس از حذف پیاده‌سازی کنید تا از از دست رفتن تصادفی داده‌ها جلوگیری شود.

چگونه می‌توان از حفظ فایل‌ها در هنگام به‌روزرسانی برنامه اطمینان حاصل کرد؟

هیچ اقدام اضافی لازم نیست — iOS و Android به طور خودکار دایرکتوری اسناد را در هنگام به‌روزرسانی از طریق App Store یا Google Play حفظ می‌کنند. با این حال، در صورت تغییر ساختار ذخیره‌سازی، مهاجرت داده‌ها را در اولین راه‌اندازی نسخه جدید با بررسی شماره نسخه طرح در تنظیمات پیاده‌سازی کنید.

خلاصه

  • Documents Directory — محل ذخیره‌سازی دائمی فایل‌های کاربر، محافظت شده از پاک شدن سیستمی و پشتیبان‌گیری شده در iOS از طریق iCloud
  • iOS به طور خودکار از Documents پشتیبان‌گیری می‌کند، آن را در برنامه Files نمایش می‌دهد و محتوا را در هنگام بازیابی دستگاه بازمی‌گرداند
  • Android از context.filesDir به عنوان معادل استفاده می‌کند — فایل‌ها در به‌روزرسانی حفظ می‌شوند اما مکانیزم داخلی پشتیبان‌گیری ندارند
  • در دایرکتوری اسناد فایل‌های کاربر، داده‌های صادر شده و پایگاه‌های داده با محتوای کاربر را قرار دهید — هر چیزی که باید پس از نصب مجدد برنامه باقی بماند
  • کش، فایل‌های موقت و منابع قابل بازتولید را در Cache Directory ذخیره کنید تا پشتیبان پر نشود و خطر از دست رفتن داده‌ها در پاک‌سازی سیستمی کاهش یابد
  • مهاجرت داده‌ها در به‌روزرسانی نسخه الزامی است: نسخه طرح را بررسی کنید، انتقال داده را آغاز کنید و پشتیبان نسخه قدیمی را برای بازگشت احتمالی نگه دارید
  • سطل زباله برای اسناد با دوره نگهداری 30 روزه از از دست رفتن تصادفی فایل‌های کاربر جلوگیری می‌کند و با الزامات HIG و Material Design مطابقت دارد

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید