問題タブ [diskarbitration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
2137 参照

objective-c - Mac OS Xでディスクイメージ(DMG)をプログラムでマウントします

Q. Apple ディスク イメージをプログラムでマウントする方法を教えてください。

私のアプローチは、ここに示すように、マウントにディスク調停を使用するのと似ています。コマンド ライン ツールは使用しないほうがよいと思います。

アンマウントとイジェクトは完全に機能しますが、マウントには BSD 名が必要です (通常、ディスクのブロック ファイルに使用されます)。DiskArbitratorのソース コードも確認しました。このツールはhdiutilバックグラウンドで使用して、DMG のブロック ファイルを作成します。

DMG のマウントに使用できるように、ディスク イメージのブロック ファイルを作成する他の方法/フレームワークはありますか?

これはもう見たことある

0 投票する
1 に答える
3978 参照

macos - OSX にマウントされたすべてのファイル システムを反復処理する方法

OSX(現在10.9 Mavericksを実行中)にマウントされたすべてのファイルシステムを反復することに興味があります。getmntent() またはマウント シェル コマンドの出力に似たものを探しています (ただし、目的の C から実行したいので、シェル コマンドの出力の解析は明らかに最適ではありません)。

ディスク アービトレーション フレームワークを少し調べたところ、このフレームワークを使用してマウント イベントとアンマウント イベントについて通知を受けることができるようです。そこに何かが欠けているかもしれませんが、Disk Arbitration を使用して既存のマウントされたファイル システムを繰り返す方法があるかどうかはわかりません。

getfsent() を使用して解決策を提供するように見えましたが、テストした後、getfsent() を繰り返しても複数のエントリが得られないことがわかりました。次のコードを参照してください。

ここで得られる唯一のエントリは、/ ファイル システム用です。2 回目に getfsent() を呼び出すと、それ以上エントリがないかのように NULL が返されます。mount コマンドは、マウントされた cifs/smb ファイル システムを含むいくつかの他のものを表示します。

getfsent() が期待どおりの動作を開始したように見えますが、何らかの理由で停止しますか?

要約すると、私の質問は次のとおりです。OSX でファイル システムを反復処理する最良の方法は何ですか?

getfsent() から1つの結果しか得られない理由について誰かが答えを持っているなら、私もそれに興味があります。

0 投票する
1 に答える
197 参照

macos - ドライブの電源が入っていることを通知するにはどうすればよいですか?

OS X で問題が発生しました。電源がオフの状態でドライブを接続し、その後電源をオンにすると、新しいディスクが表示されたという通知が届きません。すでに電源が入っているドライブを接続すると、通知を受け取ります。

現在、ディスクが表示されたとき、ディスクが表示されなくなったとき、またはディスク アービトレーション ( DARegisterDiskAppearedCallbacket al) を介して説明が変更されたときのコールバックを登録しています。ドライブがオンになっているシナリオをカバーする可能性のあるコールバックは他にありません。

すでに接続されているドライブの電源がオンになったときに通知を受け取るにはどうすればよいですか?

0 投票する
1 に答える
1095 参照

objective-c - ディスク アービトレーション 目標 C: すべてのドライブとパーティションをアレイに配置する

この奇抜なプログラミングの世界に足を踏み入れたばかりで、非常にイライラする問題に遭遇しました。

ディスク調停フレームワークを使用して、すべてのディスクをアレイに配置しようとしています。

ご覧のとおり、すべて正常にログに記録されます。問題は、何らかの方法で「theDisk」オブジェクトを返したいということです。それで作業できます。

コールバック関数が無効なので、return ステートメントを実行できません。関数の戻り値の型を変更しようとすると、DARegisterDiskAppearedCallback 関数が完全に機能しなくなります。

繰り返しますが、ここでの私の唯一の目標は、コンピューター上のすべてのディスクとパーティションに関する情報を取得し、それらを配列に配置して、それらに関する情報を取得して操作できるようにすることです。

また、コールバック関数で「(void*)context」に何かを入れるタイミングを説明できる人はいますか? アップルのドキュメントはこれについて非常に曖昧です...または、何かが完全に欠けている可能性があります

0 投票する
1 に答える
366 参照

macos - ディスク アービトレーション フレームワークを使用しているときに、ボリュームがタイム マシン ボリュームであることを確認する信頼できる方法はありますか?

とりわけ、マウントされたボリュームが表示/非表示になると表示する OSX アプリケーションを開発しています。ディスク調停フレームワークを使用してそれを行います。タイム マシンのバックアップとして構成したネットワーク ドライブにコンピューターを接続すると、「timemachine」という名前のボリュームが表示されます。つまり、表示されるデバイスの CFDictionary は次のとおりです。

{DAVolumeMountable=true、DAVolumeNetwork=true、DAVolumeName=timemachine、DAVolumePath=file://localhost/Volumes/timemachine/、DAVolumeKind=afpfs}

このボリュームをアプリケーションの UI に表示したくありません。それを除外するのが本当にタイムマシンのボリュームであることを知るために、どの基準を使用できますか? 名前またはパスを使用するだけでは奇妙に思えます。「timemachine」という名前を持つようにフォーマットされたドライブは、理論的には同じ名前/パスでマウントされませんか?

アドバイスをいただければ幸いです。

0 投票する
1 に答える
291 参照

objective-c - DiskArbitration CFUUID オブジェクトから文字列を作成する

私のプログラムではDiskArbitration、データベースに対していくつかの値をチェックし、特定の条件が発生した場合は、マウントする前に何かを実行しています。私はDARegisterDiskPeekCallbackこのコールバックで使用しています:

UUID を使用して文字列を取得してデータベースにチェックインできるようにしたいのですが、diskProps[@"DAVolumeUUID"]はポインターではなく汎用ポインターを返すため、CFUUIDRef実行できませんCFUUIDCreateString()。上記のポインターをポインターにキャストしようとしましたが、次のCFUUIDRefエラーが発生します: Cast of an Objective-C pointer to 'CFUUIDRef *' ... is disallowed by ARC. キャストしようとしないとCFUUIDCreateString、ポインターを受け入れません。

a)ポインターをポインターにキャストする方法CFUUIDRef、または b) UUID の文字列を取得する方法はありますか?