5

ディレクトリがドライブのマウント ポイントであるかどうかを判断する関数が必要です。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 で動作させる方法がわかりません。マウント ポイントがドライブ文字 (例: C:) であると想定できますか? Windowsでネットワークマウントを使用することは可能だと思うので、そのマウントも検出できるようにしたいと思います。

4

3 に答える 3

3

Windowsはそれらを「マウントポイント」と呼ぶのに使用していませんでした[編集:現在はそうです、以下を参照してくださいZ:\\hostnameバックスラッシュ: 慎重にエスケープするか、r'...'そのようなリテラル文字列に対して Python の表記を使用します)。

編集: NTFS 5.0 マウント ポイントがサポートされているため、この投稿によると、それらの API はかなりの状態にあります-「壊れていて文書化されていない」と、投稿のタイトルは述べています。おそらく、Microsoft が提供するmountvol.exeを実行するのが最も簡単な方法mountvol drive:path /Lです。指定されたパスのマウントされたボリューム名を発行するか、そのmountvolようなすべてのマウントを一覧表示する必要があります (今は確認できないため、「すべき」と言わざるを得ません)。 )。で実行してsubprocess.Popen、その出力を確認できます。

于 2009-07-16T15:25:10.997 に答える
3

マウント ポイントを検索しますか、それともマウント ポイントかどうかを判断しますか?

とにかく、上でコメントしたように、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.')
于 2009-07-16T18:56:57.043 に答える
0

ドライブ文字が指す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)
于 2011-07-26T20:04:24.283 に答える