Testing Files Generator
العربية

كيف تنشئ ملفًا بحجم دقيق

لكل نظام أمر لذلك، والثلاثة كلها أدناه. تعطيك ملفًا بعدد البايتات الصحيح تمامًا، وفي كثير من الاختبارات هذا كل ما تحتاجه. كل أمر في هذه الصفحة جُرِّب قبل النشر على النظام الذي ينتمي إليه.

الجواب المختصر

ويندوز: fsutil file createnew name 10485760. لينكس: dd if=/dev/zero of=name bs=1M count=10. ماك: mkfile 10m name. الأحجام بالبايت، و10 MB محسوبة كما يحسبها مدير الملفات لديك تساوي 10485760.

ويندوز

fsutil، ونسخة PowerShell لا تحتاج إلى شيء إضافي

يأتي fsutil مع ويندوز. يأخذ الحجم بالبايت، فاحسب الرقم أولًا: 10 MB تساوي 10485760، و100 MB تساوي 104857600، و1 GB تساوي 1073741824.

fsutil file createnew test10mb.bin 10485760

قيس على ويندوز 11: يعمل من موجّه عادي دون حاجة إلى موجّه مرتفع الصلاحيات، ويخرج الملف بحجم 10485760 بايتًا بالضبط.

يستطيع PowerShell فعل الشيء نفسه دون استدعاء برنامج آخر، ويفهم الوحدات:

$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()

تعني 10MB في PowerShell ما قدره 10485760 بايتًا، وهو العدّ نفسه بأساس 1024 الذي يستخدمه مستكشف الملفات، فيُنتج الأمران أعلاه الحجم نفسه.

لينكس

dd وtruncate وfallocate، والفرق الذي يوقع الناس

dd هو الأمر الذي يعرفه الجميع. يكتب البايتات فعلًا:

dd if=/dev/zero of=test10mb.bin bs=1M count=10

truncate فوري، وهنا الفخ. قيس على Alpine Linux، فأبلغ الملف عن 10485760 بايتًا وشغل صفر كتل، فهو ملف متناثر. كل ما يقرؤه يحصل على عشرة ميغابايت من الأصفار، لكن القرص لم يتنازل عن المساحة قط:

truncate -s 10M test10mb.bin

هذا مناسب لاختبار حد الرفع، ومضلل لاختبار حصة القرص. أما fallocate فهو ما تلجأ إليه حين يجب أن تكون المساحة حقيقية:

fallocate -l 10M test10mb.bin

وحين يجب أن يكون المحتوى غير قابل للضغط، حتى لا يستطيع أداة الأرشفة تصغيره من جديد:

head -c 10485760 /dev/urandom > test10mb.bin

ماك

mkfile، وهو غير متناثر، والأمران اللذان تعرفهما بالفعل

يأتي ماك مع mkfile. قيس على macOS 26.6.2: 10485760 بايتًا و20480 كتلة، فالمساحة مخصصة فعلًا لا موعودة فقط:

mkfile 10m test10mb.bin

dd وtruncate موجودان أيضًا ويتصرفان كما في لينكس:

dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin

أين يتوقف هذا عن الصلاحية

ملف بالحجم الصحيح ليس ملفًا من النوع الصحيح

كل ما سبق يعطيك كتلة من الأصفار. وهذا يكفي حين لا ينظر الشيء المختبَر إلا إلى الحجم، كحد الرفع أو الحصة أو النقل. ويتوقف عن الكفاية لحظة أن يفتح أي شيء الملف.

قيس، وهو يستحق أن تجرّبه بنفسك: أنشئ ملفًا بحجم 2 MB بـ fsutil، وسمّه photo.png، وسلّمه إلى مكتبة صور. تجيب Pillow بـ cannot identify image file. إنه ليس PNG. ولم يكن كذلك قط، فالاسم وحده قال ذلك.

هذا أهم مما يبدو، بسبب الاتجاه الذي يفشل فيه الاختبار بعد ذلك. ترفض نقطة الرفع عندك الملف، فيصبح اختبارك أخضر، وتستنتج أن حد الحجم يعمل. لم ترفضه بسبب الحجم. رفضته لأن البايتات لم تكن صورة، ولم تُبلَغ القاعدة التي أردت اختبارها قط.

الطريق الآخر

ملف حقيقي من تلك الصيغة، بالحجم الذي طلبته تمامًا

هذا ما يفعله Testing Files Generator. الملف ملف أصيل من صيغته، يُفتح في البرنامج الذي يملكه، وعدد بايتاته هو ما طلبته بالضبط، حتى البايت:

tfg generate --format png --size 10mb --out ./fixtures

اطلب حجمًا لا تستطيع الصيغة بلوغه فتحصل على خطأ يذكر الحد الأدنى وسببه، لا ملفًا بحجم خاطئ أبدًا. تسرد صفحة الصيغ كل صيغة مع أصغر ملف تستطيع إنتاجه.

والحد حالات اختبار ثلاث لا حالة واحدة، لذا تبني الأداة الثلاث كلها:

tfg generate --format pdf --boundary 10mb --out ./edges

وهذا يعطيك 10485759 و10485760 و10485761 بايتًا، وبيانًا يقول أيها يجب أن يقبله نظامك وأيها يجب أن يرفضه. تستعرض صفحة حالات الاستخدام هذا وأربع مهام أخرى بُنيت الأداة لها.

مجاني ومفتوح المصدر، GPL-3.0. لا حاجة إلى التسجيل. تنزيلات ويندوز وماك موقّعة وتعمل دون تحذير.

فأيهما تستخدم؟

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