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 之前,在资源管理器中选择的所有文件始终位于同一目录中,因此很容易知道用户正在浏览哪个目录。它与任何一个文件的目录相同。为此使用ExtractFilePath

不过,从 Windows 7 开始,资源管理器允许您将目录放入名为library的组中。所有文件夹中的所有文件都显示在一个视图中。用户可以从多个目录中选择文件并将它们一次全部发送到您的程序。该视图不代表磁盘上的任何真实目录,因此这里提出的问题毫无意义。

作为替代方案,您可以决定使用发送到您的程序的所有文件共有的祖先目录,但这不会告诉您太多。一方面,如果文件驻留在多个驱动器上,则公共目录将是空字符串。即使一个或多个选定文件的目录是当前帐户,您计算的目录也可能不可写。

仅使用您收到的第一个文件的目录可能会更容易,甚至在您无法自动确定的情况下显示询问用户使用哪个目录的 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 回答