"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية قراءة بايتات الملف في صفيف Char في C++ بدون getline()؟

كيفية قراءة بايتات الملف في صفيف Char في C++ بدون getline()؟

تم النشر بتاريخ 2024-11-08
تصفح:663

How to Read File Bytes into a Char Array in C   Without getline()?

كيفية استرداد بايتات الملف إلى مصفوفة Char في C

لقراءة بايتات الملف في مصفوفة char دون استخدام getline()، فكر في باستخدام ifstream::read(). اتبع الخطوات التالية:

  1. افتح الملف:

    std::ifstream infile("C:\\MyFile.csv");
  2. الحصول على طول الملف:

    infile.seekg(0, std::ios::end); size_t length = infile.tellg(); infile.seekg(0, std::ios::beg);
    infile.seekg(0, std::ios::end);
    size_t length = infile.tellg();
    infile.seekg(0, std::ios::beg);
  3. تأكد من حجم المخزن المؤقت:
  4. if (length > حجم (المخزن المؤقت)) { الطول = الحجم (المخزن المؤقت)؛

    if (length > sizeof (buffer)) {
     length = sizeof (buffer);
    }
  5. اقرأ الملف:
  6. infile.read(buffer, length);

    infile.read(buffer, length);
  7. ملاحظات إضافية:

يوصى بفتح الملف في الوضع الثنائي (على سبيل المثال، باستخدام std::ios_base::binary) للتعامل الدقيق مع البايت.

على الرغم من أن Seekg() وtellg() يمكن الاعتماد عليهما بشكل عام، إلا أنهما قد لا يوفران دائمًا الحجم الدقيق للملف في بعض الحالات.
  • لقراءة الملف بأكمله في عملية واحدة ومعالجة الملفات الكبيرة، استخدم std::vector و std::istreambuf_iterator قد يوفر المزيد من المرونة.
  • النهج المحدث (2019):

لحساب الأخطاء المحتملة أثناء القراءة، فكر في النهج التالي:

size_t chars_read؛ إذا (!(infile.read(buffer, sizeof(buffer)))) { إذا (!infile.eof()) { // التعامل مع الخطأ أثناء القراءة } } chars_read = infile.gcount(); // احصل على العدد الفعلي للبايتات المقروءة

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3