CreateSymbolicLink関数を使用して、アプリケーションに Windows シンボリック リンクのサポートを追加しました。私たちのアプリケーションは、一連の実際のフォルダーにデータを保存します。ユーザーは、1 つのメイン ルート フォルダーの外にいくつかのフォルダーを保存する必要がありました。私たちが選んだ解決策は、シンボリック リンクでした。これにより、データのサブセットを DropBox に保持したり、ネットワーク ドライブに保存したりすることができます。これまでのところ、すべてがうまく機能しています。
Windows Explorer を使用している場合、リンク ターゲットが存在しない場合、Windows は次のメッセージを表示します。これは、ターゲットの名前が変更されたか、リモート ネットワーク ドライブが使用できないことが原因である可能性があります。
Location is not available
C:...\MyLink は、利用できない場所を参照しています。このコンピュータのハード ドライブ上またはネットワーク上にある可能性があります。ディスクが正しく挿入されていること、またはインターネットまたはネットワークに接続されていることを確認してから、やり直してください。それでも見つからない場合は、情報が別の場所に移動された可能性があります。
このチェックを複製してターゲットの場所を追加しようとしているので、ユーザーはデータが存在しない理由を知ることができます.
システム上にシンボリック リンクが存在するため、通常のディレクトリの存在チェックでは不十分です。CreateFile を呼び出してフォルダーを開くことで、これを回避しました。これにより、シンボリック リンクの代わりにターゲットの場所が開かれます。これは、チェックの必要に応じて失敗します。今、リンクが指すターゲットパスを取得しようとして立ち往生しています。
シンボリック リンクからターゲットの場所を読み取るためのこの回答済みのスタック オーバーフローの質問を見つけました。
- Windows シンボリック リンクのターゲット パスにプログラムでアクセスするにはどうすればよいですか?
ただし、その答えには、ディレクトリを開くための有効なハンドルが必要です。私の場合、トラブルシューティングとリンクの修正に役立つ壊れたリンクの名前を見つけたいと思っています。
有効なハンドルなしでシンボリック リンクのターゲットの場所を取得するにはどうすればよいですか?