كيف تنشئ ملفًا بحجم دقيق
لكل نظام أمر لذلك، والثلاثة كلها أدناه. تعطيك ملفًا بعدد البايتات الصحيح تمامًا، وفي كثير من الاختبارات هذا كل ما تحتاجه. كل أمر في هذه الصفحة جُرِّب قبل النشر على النظام الذي ينتمي إليه.
الجواب المختصر
ويندوز: 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. لا حاجة إلى التسجيل. تنزيلات ويندوز وماك موقّعة وتعمل دون تحذير.
فأيهما تستخدم؟
-
استخدم أمر النظام
حين لا يفتح أي شيء الملف. اختبار حد حجم على نقطة تفحص الحجم أولًا، أو نقل، أو حصة، أو قرص ممتلئ. سطر واحد، وهو مثبّت أصلًا.
-
استخدم مولّدًا حقيقيًا
حين يحلّل شيء ما الملف أو يعرضه أو يستورده أو يفكّه، وحين تحتاج غدًا إلى بيانات الاختبار نفسها على جهاز آخر، بايتًا ببايت.
الاثنان في هذه الصفحة لأن كلًّا منهما صواب في بعض الأحيان. الخطأ الذي ينبغي تجنبه هو استخدام الأول حيث يلزم الثاني وقراءة الاختبار الأخضر كدليل.