سؤال

لدي تطبيق مكتوب في بيثون يكتب كميات كبيرة من البيانات إلى %TEMP% مجلد. الغريب، كل مرة وبعه، يموت، والعودة IOError: [Errno 28] No space left on device. وبعد محرك الأقراص لديه كثير من المساحة الحرة، %TEMP% ليس قسمها الخاص، أنا مسؤول، والنظام ليس لديه حصص.

هل وضع ويندوز بشكل مصطنع بعض أنواع الحدود على البيانات في %TEMP%ب إن لم يكن، أي أفكار حول ما يمكن أن تسبب هذه المشكلة؟

تعديل: بعد المناقشات أدناه، أوضحت السؤال لتحسين شرح ما يجري.

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

المحلول

ما هو الخطأ الدقيق الذي تواجهه؟

هل أنت إنشاء العديد من ملفات TEMP?

ستقوم طريقة GetTempFilename برفع IOException إذا تم استخدامه لإنشاء أكثر من 65535 الملفات دون حذف الملفات المؤقتة السابقة.

ستقوم طريقة GetTempFilename برفع IOException إذا لم يتوفر اسم ملف مؤقت فريد من نوعه. لحل هذا الخطأ، احذف جميع الملفات المؤقتة غير المطابقة.

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

يخلق اسمه بشكل فريد، ملف مؤقت صفر بايت على القرص وإرجاع المسار الكامل لهذا الملف.

إذا كنت تستخدم هذا المسار، ولكن أيضا تغيير القيمة التي تم إرجاعها، تكون على دراية أنك قد تقوم بالفعل بإنشاء ملف 0BYTE وملف إضافي على رأس ذلك (مثل my_app_tmpxxxx.tmp و tmpxxxx.tmp).

كما اقترح نيستور أدناه، فكر في حذف ملفات Temp بعد الانتهاء منها باستخدامها.

نصائح أخرى

باستخدام نظام ملفات FAT32 يمكنني أن أتخيل هذا يحدث عندما:

  • كتابة الكثير من البيانات إلى ملف واحد، وتصل إلى غطاء حجم الملف 4GB.
  • أو عند إنشاء الكثير من الملفات الصغيرة والوصول إلى ملفات الملفات 2 ^ 16-2 لكل غطاء.

بصرف النظر عن هذا، لا أعرف أي حدود يمكن للنظام فرضه على مجلد TEMP، بصرف النظر عن القسم العلوي بالكامل بالكامل.

قيود آخر هو كما اقترح مايك أطلس GetTempFileName() وظيفة التي تنشئ ملفات من النوع tmpXXXX.tmp. وبعد على الرغم من أنك قد لا تستخدمه مباشرة، تحقق من أن %TEMP% المجلد لا يحتوي على الكثير منهم (2 ^ 16).

وربما ما هو واضح، هل حاولت إفراغ المجلد٪ temp٪ قبل تشغيل الأداة المساعدة؟

لا ينبغي أن يكون هناك قيود الفضاء مثل TEMP. إذا كتبت التطبيق، فسوف أوصي بإنشاء ملفاتك في البرامج ...

يجب ألا تكون هناك مشكلة في الاعتبار إلى دليل٪ Temp٪.

ما هي مجموعة حصص القرص الخاصة بك إلى حجم استضافة Temp٪؟ اعتمادا جزئيا على ما يفعله التطبيقات نفسها، قد يقوم أحدهم بإلقاء خطأ بسبب الوصول إلى حصة القرص، وهو ألم في حالة تعيين هذه الحصص مرتفعة بشكل غير معقول. إذا كانت الحصة عالية جدا، فحاول خفضها، والذي يمكنك القيام به كمسؤول.

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