سؤال

أكتب نص Python لنسخ الملفات ؛ لسوء الحظ ، يستمر الفشل لأن اسم الملف طويل جدًا (> 256). هل هناك على أي حال للتعامل مع هذه المشكلة؟

أنا أستخدم Python 2.5.4 و Windows XP.

هتافات،

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

المحلول

نصائح أخرى

من أجل استخدام \\?\ بادئة (كما هو مقترح بالفعل) ، تحتاج أيضًا إلى التأكد من استخدام سلاسل Unicode كأسماء ملفات ، وليس سلاسل عادية (بايت).

هل جربت الحلول المقترحة في هذه الموضوع القديم ، إكسب. خدعة "البادئة السحرية"؟ لا أعرف ما إذا كانت مشكلة Underyling (التي لا نستخدمها الصحيح من بين العديد من واجهات برمجة التطبيقات Windows المتاحة للملفات) تم إصلاحها على الإطلاق ، ولكن يجب أن تعمل الحلول ...

لأي شخص آخر يبحث عن الحل هنا:

  1. تحتاج إلى إضافة بادئة \\?\ كما ذكرنا بالفعل ، وتأكد من أن السلسلة هي Unicode ؛
  2. إذا كنت تستخدم Shutil ، لا سيما مثل Shutil.rmtree باستخدام طريقة onerror ، فستحتاج إلى تعديلها أيضًا لإضافة بادئة حيث يتم تجريدها في مكان ما في الطريق.

عليك أن تكتب شيئًا مثل:

def remove_dir(directory):
    long_directory = '\\\\?\\' + directory
    shutil.rmtree(long_directory, onerror=remove_readonly)

def remove_readonly(func, path, excinfo):
    long_path = path
    if os.sep == '\\' and '\\\\?\\' not in long_path:
        long_path = '\\\\?\\' + long_path
    os.chmod(long_path, stat.S_IWRITE)
    func(long_path)

هذا مثال على Python 3.x بحيث تكون جميع الأوتار Unicode.

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