4

Mac OS X の実行時に、特定のパスがネットワーク パスかローカル パスかをプログラムで判断するにはどうすればよいですか?

例: 1. /Volumes/abc/xyz (smb を使用してマウント) 2. ../test/pqr (アプリケーションは共有ネットワーク パス上にあるため、現在の作業ディレクトリもネットワーク パスであり、したがって相対パスもネットワーク パス)

Windows と同様に、以下のコードは、pPath がネットワーク共有パス (* 1. \TallyDT100\c\test\file.txt 2. z:\test\file.txt のように z: がマップされている場合のネットワーク パス) であるかどうかを判断します。いくつかのネットワーク パス)。

    UNIVERSAL_NAME_INFO   * universalname   = NULL;             ///< for getting the universal path name of file on network share.
    DWORD                   retval;                             ///< for getting the return value from WNetGetUniversalName
    DWORD                   length          = MAX_PATH_LEN;     ///< length of universal name which would be made.


// The memory for getting the universal name information is allocated.
universalname = (UNIVERSAL_NAME_INFO *) Calloc (MAX_PATH_LEN * sizeof (Char));

retval = WNetGetUniversalName (pPath, UNIVERSAL_NAME_INFO_LEVEL, universalname, &length);

Free (universalname);

// NO_ERROR is returned only when it's drive mapped for shared network folder.
return (NO_ERROR == retval) ? true : false;
4

4 に答える 4

3

誰かが Google 検索でこれに出くわした場合に備えて、Apple からの役立つ情報を以下に示します。

ボリュームがネットワーク ボリュームであるかどうかをテストするには、さまざまな方法があります。使用する最適な方法は、作業しているレイヤーによって異なります。

一般的なアプリケーション コードに取り組んでいる場合は、これに NSURL を使用する必要があります。ボリューム上の任意のアイテムの URL を作成し、-getResourceValue:forKey:error: を呼び出して NSURLVolumeIsLocalKey キーを取得します。戻り値は、ネットワーク ボリュームの場合は false (kCFBooleanFalse)、ローカル ボリュームの場合は true (kCFBooleanTrue) になります。

BSD レイヤーでプログラミングしている場合は、statfs を呼び出して、返される f_flags フィールドの MNT_LOCAL フラグをテストできます。または、getattrlist を呼び出して ATTR_VOL_MOUNTFLAGS 属性を要求することもできます。これは、状況によっては statfs よりも効率的です。

https://developer.apple.com/library/mac/qa/nw09/_index.html

于 2015-01-27T03:43:52.713 に答える
0

NSSearchPathForDirectoriesInDomains で NSLocalDomainMask と NSNetworkDomainMask を使用できます。

参考までに、リンク - http://www.filibeto.org/unix/macos/lib/dev/documentation/Cocoa/Conceptual/LowLevelFileMgmt/LowLevelFileMgmt.pdfを参照してください。ここのトピック「システム上のディレクトリの検索」では、NSSearchPathForDirectoriesInDomains クラスについて説明しています。

于 2013-10-21T06:46:12.747 に答える