سؤال

قم بإنشاء ملف نصي مسطح في C ++ حوالي 50 - 100 ميجابايت مع المحتوى "المضافة الأول" يجب إدراجه في الملف لمدة 4 ملايين مرة

هل كانت مفيدة؟

المحلول

باستخدام ملف النمط القديم io

com.fopen الملف للكتابة.

com.fseek إلى حجم الملف المطلوب - 1.

com.fwrite بايت واحد

com.f Close الملف

نصائح أخرى

واسرع وسيلة لإنشاء ملف من حجم معين هو ببساطة إنشاء ملف ذات طول صفري باستخدام creat() أو open() ثم قم بتغيير حجم باستخدام chsize(). وهذا ببساطة تخصيص كتل على القرص للملف، فإن محتويات يكون كل ما تصادف وجوده في تلك الكتل. انها سريعة جدا نظرا لعدم كتابة عازلة تحتاج لتأخذ مكان.

وليس على يقين من أنني أفهم السؤال. هل تريد التأكد من أن كل حرف في الملف هو حرف ASCII للطباعة؟ إذا كان الأمر كذلك، ماذا عن هذا؟ يملأ الملف مع "abcdefghabc ...."

#include <stdio.h>
int main ()
{
   const int FILE_SiZE = 50000; //size in KB
   const int BUFFER_SIZE = 1024;
   char buffer [BUFFER_SIZE + 1];
   int i;
   for(i = 0; i < BUFFER_SIZE; i++)
      buffer[i] = (char)(i%8 + 'a');
   buffer[BUFFER_SIZE] = '\0';

   FILE *pFile = fopen ("somefile.txt", "w");
   for (i = 0; i < FILE_SIZE; i++)
     fprintf(pFile, buffer);

   fclose(pFile);

   return 0;
}

لم تذكر نظام التشغيل ولكني سأفترض أن الإنشاء/الفتح/الإغلاق/الكتابة متاحان.

من أجل كتابة فعالة حقًا وافتراض حجم صفحة 4K وكتلة القرص وسلسلة متكررة، على سبيل المثال:

  1. افتح الملف.
  2. قم بتخصيص عدد 4K * من الأحرف في السلسلة المتكررة، بحيث تتم محاذاتها بشكل مثالي مع حدود الصفحة.
  3. طباعة سلسلة متكررة في الذاكرة 4 كيلو مرات، وملء الكتل بدقة.
  4. استخدم write()‎ لكتابة الكتل على القرص عدة مرات حسب الضرورة.قد ترغب في كتابة قطعة جزئية للكتلة الأخيرة للحصول على الحجم الصحيح.
  5. أغلق الملف.

يؤدي هذا إلى تجاوز التخزين المؤقت لـ fopen()‎ والأصدقاء، وهو أمر جيد وسيئ:يعني التخزين المؤقت الخاص بها أنها لطيفة وسريعة، لكنها ما زالت لن تكون فعالة مثل هذه، والتي ليس لها أي نفقات إضافية للعمل مع المخزن المؤقت.

يمكن كتابة هذا بسهولة بلغة C++ أو C، ولكن يفترض أنك ستستخدم مكالمات POSIX بدلاً من iostream أو stdio من أجل الكفاءة، لذا فهو خارج مواصفات المكتبة الأساسية.

أسرع طريقة لإنشاء ملف كبير في C++؟نعم.أفترض أن الطريقة الأسرع تعني الطريقة التي تستغرق أقل وقت تشغيل.

أنشئ ملفًا نصيًا ثابتًا بلغة c++ يبلغ حجمه حوالي 50 - 100 ميجابايت مع إدراج المحتوى "تمت إضافة السطر الأول" في الملف لمدة 4 ملايين مرة.

التخصيص المسبق للملف باستخدام ملف النمط القديم io

fopen the file for write.
fseek to the desired file size - 1.
fwrite a single byte
fclose the file

create a string containing the "Added first line\n" a thousand times.
find it's length.

التخصيص المسبق للملف باستخدام ملف النمط القديم io

fopen the file for write.
fseek to the the string length * 4000
fwrite a single byte
fclose the file

open the file for read/write
loop 4000 times, 
    writing the string to the file.
close the file.

هذا أفضل تخميني.أنا متأكد من أن هناك الكثير من الطرق للقيام بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top