문제

디렉토리가 드라이브의 마운트 포인트인지 확인하려면 기능이 필요합니다. Linux에 잘 작동하는이 코드를 이미 발견했습니다.

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에서 어떻게 작동시키는 지 잘 모르겠습니다. 마운트 포인트가 드라이브 문자라고 가정 할 수 있습니까? Windows에 네트워크 마운트가있을 수 있다고 생각하므로 해당 마운트를 감지 할 수 있습니다.

도움이 되었습니까?

해결책

Windows는 "Mount Points"라고 부르는 데 사용하지 않았습니다.편집하다: 지금은 아래를 참조하십시오!] 그리고 당신이 찾을 수있는 두 가지 전형적인/전통적인 구문은 드라이브 문자입니다. Z:, 또는 그렇지 않으면 \\hostname (두 개의 주요 백 슬래시 포함 : 신중하게 탈출하거나 사용 r'...' Python fpr에서 그러한 문자 그대로의 표기법).

편집하다: NTFS 5.0 마운트 포인트가 지원되므로 이 게시물 그들에 대한 API는 "부서지고 잘못 문서화 된"상태에 있다고 포스트의 제목은 말합니다. 아마도 Microsoft 지원을 실행할 수 있습니다 mountvol.exe 가장 고통스러운 방법입니다. mountvol drive:path /L 지정된 경로의 장착 볼륨 이름을 방출해야합니다. mountvol 그러한 모든 마운트 (지금은 확인할 수 없기 때문에 "해야 할 것"이라고 말해야합니다). 당신은 그것을 실행할 수 있습니다 subprocess.Popen 출력을 확인하십시오.

다른 팁

마운트 포인트를 찾거나 마운트 포인트인지 판단 하시겠습니까?

그럼에도 불구하고 위에서 언급 한 바와 같이 WinXP에서는 논리 드라이브를 폴더에 매핑 할 수 있습니다.

자세한 내용은 여기를 참조하십시오. http://www.modzone.dk/forums/showthread.php?threadid=278

Win32api.getVolumeInformation을 시도합니다

>>> 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