السلام عليكم تحية طيبة للجميع كيف يمكننى اخذ نسخة احتياطية من قاعدة البيانات وحفظة فى اى مجلد على الهاتف
كتبت هذا الكود ولاكن يظهر خطا انه لايمكن الوصول الى ملف قاعدة البيانات
import { openDatabase } from 'react-native-sqlite-storage';
const [db, setDb] = useState(openDatabase({ name: 'applicationdiftare.db',location: 'default'}));
try {
const AppFolder = 'Business_Coustomers';
const DirectoryPath = RNFS.ExternalStorageDirectoryPath + '/Documents/' + AppFolder;
mkdir(DirectoryPath);
//هنا يتم النشاء الملف بنجاح
المشكلة هنا
لا يمكن الوصول الى مسار قاعدة البيانات
const sqliteDbPath = RNFS.DocumentDirectoryPath + '/applicationdiftare.db'; // مسار قاعدة البيانات
RNFS.copyFile(sqliteDbPath, '/storage/emulated/0/Documents/backup_database.db')
} catch (error) {
console.log('error')
}
يوجد الكثير من الأشياء التي عليك ان تتحق منها قبل النسخ مباشرة، و لتفادي الأخطاء عليك كتابتة الكود بشكل كامل او نا نسميع بالبرمجة error handling، من أهم الأشياء هي انه عليك أن تتأكد من أن لديك إذن للوصول إلى ملفات الهاتف، أي يجب أن يكون لديك إذن WRITE_EXTERNAL_STORAGE.
قم ايضا بتحديد المسار الصحيح لملف النسخ الاحتياطي الذي تريد نسخه إليه وجرب استخدام وظيفة RNFS.copyFile بشكل صحيح لنسخ ملف قاعدة البيانات إلى المجلد المستهدف.
ولا تنسى التحقق من استيراد المكتبات الصحيحة في ملفك لأنه على حسب الكود الذي كتبته لم تقم بإستيراد المكتبة react-native-fs.
هذا الكود مع بعض التعديلات التي ذكرتها:
import { openDatabase } from 'react-native-sqlite-storage';
import RNFS from 'react-native-fs';
// قم بفتح قاعدة البيانات
const db = openDatabase({ name: 'applicationdiftare.db', location: 'default' });
try {
const AppFolder = 'Business_Customers';
const DirectoryPath = RNFS.ExternalStorageDirectoryPath + '/Documents/' + AppFolder;
// تأكد من وجود المجلد وإنشاؤه إذا لم يكن موجودا
RNFS.mkdir(DirectoryPath)
.then(() => {
// الحصول على المسار الصحيح لقاعدة البيانات
const sqliteDbPath = RNFS.DocumentDirectoryPath + '/applicationdiftare.db';
const backupDbPath = DirectoryPath + '/backup_database.db';
// قم بنسخ ملف قاعدة البيانات إلى المجلد المستهدف
RNFS.copyFile(sqliteDbPath, backupDbPath)
.then(() => {
console.log('تم نسخ قاعدة البيانات بنجاح');
})
.catch((err) => {
console.log('حدث خطأ أثناء نسخ ملف قاعدة البيانات', err);
});
})
.catch((err) => {
console.log('حدث خطأ أثناء إنشاء المجلد', err);
});
} catch (error) {
console.log('حدث خطأ', error);
}
قمت بالتنفيذ ولاكن تظهر error
[Error: ENOENT: /data/user/0/com.awesomeproject/files/applicationdiftare.db: open failed: ENOENT (No such file or directory), open '/data/user/0/com.awesomeproject/files/applicationdiftare.db']
الخطأ الذي تواجهه يشير إلى أن الملف الذي تحاول نسخه applicationdiftare.db غير موجود في المسار المحدد، تحقق من أنك تستخدم المسار الصحيح لقاعدة البيانات..
التعليقات