العمل مع نظام الملفات في TypeScript: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في العمل مع نظام الملفات في TypeScript



TypeScript هي امتداد مكتوب بقوة للغة JavaScript، يضيف كتابة ثابتة ويحسن قابلية قراءة الكود وصيانته. إحدى المهام الرئيسية عند تطوير تطبيقات الخادم هي العمل مع نظام الملفات: قراءة وكتابة الملفات، إنشاء وحذف المجلدات، إدارة تدفقات البيانات. في هذه المقالة، سنشرح بالتفصيل كيفية العمل بكفاءة مع نظام الملفات في TypeScript باستخدام الوحدة المدمجة fs من Node.js.



توفر الوحدة fs طرقاً متزامنة وغير متزامنة للتفاعل مع نظام الملفات. في TypeScript، يمكننا الاستفادة من مزايا الكتابة الثابتة لجعل الكود أكثر موثوقية ووضوحاً. سنستعرض العمليات الأساسية، بما في ذلك القراءة والكتابة والتحقق من وجود الملفات والعمل مع المجلدات ومعالجة الأخطاء.



العمليات الأساسية مع الملفات



قراءة الملفات



لقراءة محتوى ملف في TypeScript، يمكن استخدام الطريقة readFile (غير متزامنة) أو readFileSync (متزامنة). يُوصى بالنهج غير المتزامن لتنفيذ البرنامج دون حظر.



import { readFile } from 'fs/promises';

async function readFileExample(filePath: string): Promise<string> { try { const data = await readFile(filePath, 'utf-8'); return data; } catch (error) { console.error('خطأ في قراءة الملف:', error); throw error; }}

// الاستخدامreadFileExample('example.txt').then(content => { console.log('محتوى الملف:', content);});


لاحظ استخدام fs/promises - وهي غلاف بروميس يسمح باستخدام صياغة async/await. نوع القيمة المُرجعة Promise<string> يحدد بوضوح أن الدالة تُرجع سلسلة نصية.



الكتابة في الملفات



تتم كتابة البيانات إلى ملف باستخدام الطريقتين writeFile و writeFileSync. في TypeScript، من المهم معالجة الأخطاء المحتملة بشكل صحيح، خاصة إذا كان الملف محمياً ضد الكتابة أو إذا كان المسار غير موجود.



import { writeFile, mkdir } from 'fs/promises';import { existsSync } from 'fs';

async function writeFileExample(filePath: string, data: string): Promise<void> { try { // نتحقق من وجود المجلد const dir = filePath.substring(0, filePath.lastIndexOf('/')); if (dir && !existsSync(dir)) { await mkdir(dir, { recursive: true }); } await writeFile(filePath, data, 'utf-8'); console.log('تمت كتابة الملف بنجاح'); } catch (error) { console.error('خطأ في كتابة الملف:', error); }}

// الاستخدامwriteFileExample('data/output.txt', 'Hello, TypeScript!');


في هذا المثال، نتحقق أولاً من وجود المجلد ونقوم بإنشائه إذا لزم الأمر باستخدام mkdir مع الخيار recursive: true. هذا يتجنب الخطأ "ENOENT" إذا كان المجلد الأصلي غير موجود.



إضافة البيانات إلى نهاية الملف



إذا كنت بحاجة إلى إضافة بيانات إلى ملف موجود، استخدم الطريقة appendFile:



import { appendFile } from 'fs/promises';

async function appendToFile(filePath: string, data: string): Promise<void> { try { await appendFile(filePath, '' + data, 'utf-8'); console.log('تمت إضافة البيانات'); } catch (error) { console.error('خطأ في الإضافة:', error); }}


العمل مع المجلدات



إنشاء وحذف المجلدات



لإنشاء المجلدات يُستخدم mkdir، وللحذف يُستخدم rmdir أو rm (للحذف التكراري). في TypeScript، من المناسب استخدام الأدوية (Generics) لكتابة المسارات.



import { mkdir, rmdir, rm } from 'fs/promises';import { existsSync } from 'fs';

async function createDirectory(di

المدونات

توصيات الكتب