我在SendTo中为我的应用程序添加了一个快捷方式。现在我可以在Explorer中选择一些文件并将它们发送到我的应用程序。但是我怎样才能获得文件所在的路径?我的程序应该在父目录中创建一个新文件,该文件对于所有收到的文件名是通用的。
例如,如果我有这些文件:
C:\one.txt C:\1\
我在资源管理器中选择文件 one.txt 和目录 1 。如何找出这些文件的起始目录是 C:\ ?
我知道我可以使用ParamStr()
来获取文件的路径,但那么呢?
我可以尝试为传递给我的应用程序的所有文件获取公共目录,但是如果我选择 C:\ 目录 1 和 2 并且这些目录看起来像这样:
C:\1\4\5\one.txt C:\1\4\two.txt
然后起始目录是 C:\ 1 \ 4 。
答案 0 :(得分:2)
在Windows 7之前,在资源管理器中选择的所有文件始终位于同一目录中,因此很容易知道用户正在浏览的目录。它与任何一个文件的目录相同。请使用ExtractFilePath
。
从Windows 7开始,资源管理器允许您put directories into groups called libraries。所有文件夹中的所有文件一起显示在一个视图中。用户可以从多个目录中选择文件,并将它们全部发送到您的程序。该视图不代表磁盘上的任何真实目录,因此这里提出的问题毫无意义。
作为替代方案,您可以决定使用the ancestor directory common to all the files发送到您的程序,但这不会告诉您太多。首先,如果文件驻留在多个驱动器上,则公共目录将是空字符串。您计算的目录也可能无法由当前帐户写入,即使一个或多个所选文件的目录是。
使用您收到的第一个文件的目录可能更容易,甚至可以显示一个UI,询问用户在无法确定的情况下使用哪个目录自动。 (也许您可以使用第一个目录预先填充结果,因此用户无需做任何事情,只能在常见情况下批准您的建议。)
答案 1 :(得分:0)
我想我会通过ParamStr获取传递给我程序的所有文件名并使用此函数: http://delphi.about.com/od/delphichallengesexercises/qt/delphi-extract-base-path-challenge.htm 找到共同的基本路径,它应该是调用SendTo的路径。