عند فحص الشيفرة التي قدمتها، يظهر أن هناك عدة أخطاء تحتاج إلى إصلاح لضمان تشغيل البرنامج بشكل صحيح. لنقم بمراجعة الشيفرة وتصحيح الأخطاء:
-
يجب عليك تضمين المكتبات اللازمة في رأس البرنامج، حيث يفترض أن تضمن
لاستخدامcout
وifstream
، و
لاستخدامstrcmp
. -
يجب استخدام
#include
و#include
لتضمين المكتبات الخاصة بالإدخال/الإخراج وقراءة الملفات. -
يجب تعيين عنوان الدليل بشكل صحيح عند فتحه باستخدام
opendir
. عليك استخدام المسار الكامل للمجلد أو استخدام دالةgetcwd
للحصول على المسار الحالي. -
يفضل استخدام
std::string
بدلاً من المصفوفات لتمثيل أسماء الملفات، واستخدامstd::ifstream
بدلاً منifstream
. -
يجب التحقق من نجاح فتح الملف باستخدام
myReadFile.is_open()
قبل قراءة المحتوى. -
يجب استخدام
std::cout
بدلاً منcout
.
إليك إصدار معدل من الشيفرة يصحح هذه الأخطاء:
cpp#include
#include
#include
#include
#include
int main(void)
{
DIR *d;
struct dirent *dir;
char currentPath[PATH_MAX];
getcwd(currentPath, sizeof(currentPath));
d = opendir(currentPath);
if (d)
{
while ((dir = readdir(d)) != NULL)
{
if (strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0)
{
continue;
}
std::ifstream myReadFile;
myReadFile.open(dir->d_name);
char output;
if (myReadFile.is_open())
{
while (myReadFile >> output)
{
std::cout << output << std::endl;
}
myReadFile.close();
}
}
closedir(d);
}
return 0;
}
يرجى مراعاة هذه التحسينات وتجربة الشيفرة المعدلة على نظامك.
المزيد من المعلومات
بالطبع، سنقوم الآن بتوسيع المعلومات المقدمة بشكل أكبر حول كيفية الوصول إلى محتوى ملفات مجلد باستخدام لغة البرمجة C.
في الشيفرة التي قدمتها، يتم استخدام مكتبة
لفتح المجلد واستعراض محتواه. يتم ذلك باستخدام الهيكل struct dirent
ودالة opendir
لفتح المجلد واستخدام دالة readdir
للحصول على قائمة الملفات والمجلدات داخله.
تم استخدام strcmp
للتحقق من أن اسم الملف ليس “.” أو “..” لتجنب دخول المجلدات الفرعية والحفاظ على استقرار البرنامج.
بمجرد الحصول على اسم الملف، يتم استخدام std::ifstream
لفتح الملف وmyReadFile >> output
لقراءة محتواه. يتم فحص نجاح فتح الملف باستخدام myReadFile.is_open()
لضمان عملية القراءة بنجاح.
الاستفادة من std::cout
لطباعة محتوى الملف على الشاشة تضمن أن يتم عرض النتائج بشكل صحيح.
يمكنك استخدام هذا النموذج كنقطة انطلاق لفهم كيفية الوصول إلى الملفات والمجلدات باستخدام لغة C، مع مراعاة توسيع الشيفرة وتحسينها حسب احتياجاتك المحددة.