سؤال

كنت أتساءل عما إذا كان من الممكن الكتابة إلى Freespace في C#؟ أعني شيئًا مثل FreeSpace.WriteAllBytes() أو مثل ما تفعله بعض تطبيقات التقطيع؟

كيف يمكنني فعل ذلك؟

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

المحلول

إذا كانت نيتك ببساطة في الكتابة فوق جميع المساحة الحرة المتوفرة على محرك الأقراص الثابتة ، فيمكنك استخدام GetDiskFreeSpaceEx API لتحديد عدد البايتات المتاحة واكتب ملفًا كبيرًا (أو نشره بين عدة ملفات).

P/استدعاء لـ C#:

[DllImport("kernel32")]
public static extern int GetDiskFreeSpaceExW(string dir, ref ulong freeBytesAvailable,
    ref ulong totalNumBytes, ref ulong totalFreeBytes);

يمكنك استخدام فئة مثل System.Random لملء مجموعة من البايتات بقيم عشوائية قبل كتابتها ، إذا كان ذلك قد يهمك.

تعديل: لم يكن على دراية بفئة System.io.driveInfo ، والتي يمكن أن تكون أبسط من استخدام واجهة برمجة التطبيقات المذكورة.

نصائح أخرى

هذه الوظيفة المحددة ليست مدمجة في C#، ولكن يمكنك بسهولة كتابتها بنفسك ، عن طريق فتح ملف وكتابة بايت (0) حتى القرص ممتلئ.

لاحظ أن بعض أنظمة الملفات سوف تحد من الحد الأقصى لحجم الملف.

لقد نجح هذا الأمر بالنسبة لي للحصول على مساحة خالية من محرك الأقراص (C#) ، عبر ادارة النظام

ManagementObject di = new ManagementObject("win32_logicaldisk.deviceid=\"C:\"");
di.Get();
UInt64 freeSpace = (UInt64)di["FreeSpace"]; //in bytes

يمكنك الآن كتابة ملفات مسماة عبر System.Guid.newguid () لملء جميع المساحة (استخدم مضاعفًا لحجم مجموعة نظام الملفات).

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