0

アプリケーションへのショートカットを SendTo に配置しました。これで、エクスプローラーでいくつかのファイルを選択して、アプリケーションに送信できるようになりました。しかし、どうすればファイルのパスを取得できますか? 私のプログラムは、受け取ったすべてのファイル名に共通の新しいファイルを親ディレクトリに作成することになっています。

たとえば、次のファイルがあるとします。

C:\one.txt
C:\1\

ファイルone.txtとディレクトリ1をエクスプローラーで選択します。これらのファイルの開始ディレクトリがC:\であることを確認するにはどうすればよいですか?

ParamStr()ファイルのパスを取得するために使用できることは知っていますが、その後はどうすればよいでしょうか? アプリケーションに渡されるすべてのファイルの共通ディレクトリを取得しようとすることもできますが、C:\ディレクトリ12を選択すると、これらのディレクトリは次のようになります。

C:\1\4\5\one.txt
C:\1\4\two.txt

次に、開始ディレクトリはC:\1\4です。

4

2 に答える 2

2

Windows 7 より前では、エクスプローラーで選択されたすべてのファイルは常に同じディレクトリにあるため、ユーザーが参照していたディレクトリを簡単に知ることができました。任意の 1 つのファイルのディレクトリと同じです。そのために使用ExtractFilePathします。

ただし、Windows 7 の時点では、Explorer を使用してディレクトリをライブラリと呼ばれるグループに入れることができます。すべてのフォルダのすべてのファイルが 1 つのビューにまとめて表示されます。ユーザーは、複数のディレクトリからファイルを選択し、それらすべてを一度にプログラムに送信できます。ビューはディスク上の実際のディレクトリを表していないため、ここでの質問は無意味です。

別の方法として、プログラムに送信されるすべてのファイルに共通の祖先ディレクトリを使用することもできますが、それではあまりわかりません。たとえば、ファイルが複数のドライブに存在する場合、共通ディレクトリは空の文字列になります。計算したディレクトリは、選択したファイルの 1 つ以上のディレクトリが現在のアカウントで書き込み可能であっても、書き込み可能でない場合があります。

おそらく、最初に受け取ったファイルのディレクトリを使用するか、自動的に決定できない場合に使用するディレクトリをユーザーに尋ねる UI を表示する方が簡単です。(結果に最初のディレクトリを事前に入力しておくと、ユーザーは通常、提案を承認する以外に何もする必要がなくなります。)

于 2012-06-11T17:52:19.517 に答える
0

ParamStr を介してプログラムに渡されたすべてのファイル名を取得し、次の関数を使用すると思います : http://delphi.about.com/od/delphichallengesexercises/qt/delphi-extract-base-path-challenge.htm SendTo が呼び出されたパスである必要があるベース パス。

于 2012-06-10T15:27:30.363 に答える