سؤال

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

def getmount(path):
  path = os.path.abspath(path)
  while path != os.path.sep:
    if os.path.ismount(path):
      return path
    path = os.path.abspath(os.path.join(path, os.pardir))
  return path

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

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

المحلول

لم تستخدم Windows للاتصال بهم "نقاط الجبل" [تعديل: الآن يفعل الآن، انظر أدناه!]، ومتابعتي التجميعات النموذجية / التقليدية يمكنك أن تجد لهم إما حرف محرك الأقراص، على سبيل المثال Z:, ، او اخرى \\hostname (مع اثنين من الروايات الخلفية الرائدة: الهروب بعناية أو استخدام r'...' تدوين في بيثون FPR هذه السلاسل الحرفية).

تعديل: منذ NTFS 5.0 نقاط جبل مدعومة، ولكن وفقا ل هذا المشنور وتقول عنوان الوصيف إن واجهة برمجة التطبيقات بالنسبة لهم في حالة جيدة - "مكسورة وسوء موثقة". ربما تنفيذ Microsoft-Formied mountvol.exe. هو الأقل طريقة مؤلمة - mountvol drive:path /L يجب أن تنبعث اسم مستوى الصوت المثبت للمسار المحدد، أو فقط mountvol هذه القائمة جميع هذه الجبال (يجب أن أقول "يجب أن" لأنني لا أستطيع التحقق الآن). يمكنك تنفيذها مع subprocess.Popen والتحقق من إخراجها.

نصائح أخرى

هل ترغب في العثور على نقطة الجبل أو مجرد تحديد ما إذا كانت نقطة جبل؟

بغض النظر، كما هو الحال أعلاه، فمن الممكن في WinXP لتعيين محرك أقراص منطقي إلى مجلد.

انظر هنا للحصول على التفاصيل: http://www.modzone.dk/forums/showthread.php؟threadid=278.

سأحاول Win32api.getVolumeformation

>>> import win32api
>>> win32api.GetVolumeInformation("C:\\")
    ('LABEL', 1280075370, 255, 459007, 'NTFS')
>>> win32api.GetVolumeInformation("D:\\")
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS')
>>> win32api.GetVolumeInformation("C:\\TEST\\") # same as D:
    ('CD LABEL', 2137801086, 110, 524293, 'CDFS')
>>> win32api.GetVolumeInformation("\\\\servername\\share\\")
    ('LABEL', -994499922, 255, 11, 'NTFS')
>>> win32api.GetVolumeInformation("C:\\WINDOWS\\") # not a mount point
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    pywintypes.error: (144, 'GetVolumeInformation', 'The directory is not a subdirectory of the root directory.')

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

import sys,os,string,re,win32file
for ch in string.uppercase:  # use all uppercase letters, one at a time
    dl = ch + ":"
    try:
        flds = win32file.QueryDosDevice(dl).split("\x00")
    except:
        continue
    if re.search('^\\\\Device\\\\LanmanRedirector\\\\',flds[0]):
        flds2 = flds[0].split(":")
    st = flds2[1]
    n = st.find("\\")
    path = st[n:] 
        print(path)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top