2012-06-10 23 views
0

我在SendTo中放入了一個我的應用程序的快捷方式。現在我可以在資源管理器中選擇一些文件並將它們發送給我的應用但是,我怎樣才能得到文件的路徑?我的程序應該在父目錄中創建一個新的文件,這對所有接收到的文件名都是通用的。從「發送到」菜單調用我的程序時,如何確定用戶正在瀏覽哪個文件夾?

舉例來說,如果我有這些文件:

 
C:\one.txt 
C:\1\ 

我選擇文件此時就把one.txt存盤並在資源管理器的目錄。我如何知道這些文件的起始目錄是C:\

我知道我可以使用ParamStr()來獲取文件的路徑,但是什麼呢? 我可以嘗試讓公共目錄傳遞給我的應用程序中的所有文件,但如果我在C優先選擇:\目錄和和這些目錄如下所示:

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

然後起始目錄是C:\ 1 \ 4

+0

所以你問如何提取文件名部分的驅動器號?爲什麼不使用['ExtractFileDrive'](http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.ExtractFileDrive)? – Chris

+0

您的應用程序的起始路徑是您的快捷方式的'開始'目錄。這是你問的嗎?有多個文件有什麼重要意義? –

+0

@Chris:不,我的起始路徑可以是C:\ 1而不是C:\我想知道選擇發送到我的程序的文件的基本目錄。 – Tom

回答

2

在Windows 7之前,在資源管理器中選擇的所有文件總是駐留在同一個目錄中,因此很容易知道用戶正在瀏覽哪個目錄。它與任何一個文件的目錄相同。對此使用ExtractFilePath

從Windows 7開始,雖然Explorer可以讓你put directories into groups called libraries。所有文件夾中的所有文件都以單個視圖一起顯示。用戶可以從多個目錄中選擇文件,並將它們全部發送到您的程序中。該視圖並不代表磁盤上的任何實際目錄,因此這裏提出的問題沒有意義。

作爲替代方案,您可以決定使用發送到您的程序的the ancestor directory common to all the files,但這不會告訴你很多。首先,如果文件駐留在多個驅動器上,則公共目錄將爲空字符串。即使一個或多個所選文件的目錄是,您計算的目錄也可能無法由當前帳戶寫入。

它可能會更容易只需要使用目錄收到第一文件,甚至顯示,要求用戶在情況下使用哪個目錄,你不能自動確定它的UI。 (也許你可以預先填充第一個目錄的結果,所以用戶不需要做任何事情,只需在普通情況下批准你的建議。)

+0

謝謝,不知道Windows 7上的這些「庫」。在Win 7以前的祖先目錄應該做我想做的事情,我看不出它是如何變空的。有了Win7我會稍後處理,也許我會問你用戶想要使用的內容,就像你所建議的那樣。 – Tom

+0

實際上,IDataObject(Send To「文件列表」)可以包含來自所有Windows版本(包括Win95)上不同目錄的文件。怎麼樣?從一個地方;文件搜索! – Anders

0

我想我會只是採取通過ParamStr這傳遞給我的程序中的所有文件名,並使用此功能: http://delphi.about.com/od/delphichallengesexercises/qt/delphi-extract-base-path-challenge.htm 找到這應該是其中的SendTo被調用的路徑常見的基本路徑。

+0

我擔心你似乎認爲公共父目錄在這種情況下有任何意義。它沒有。常見的父目錄甚至可能是一個空字符串,所以我不確定你打算如何處理它。 –

+0

我想用選定的文件做一些事情,並在用戶選擇這些文件的目錄中創建一個新文件。所以它對我有意義。我不明白這可能是一個空字符串。 – Tom

+0

你不明白它是如何成爲一個空字符串?你認爲C:\ foo.txt和D:\ bar.txt的常用文件夾是什麼? –

相關問題