2012-02-26 59 views
3

我想複製剪貼板中的文件路徑,以便它們可以作爲字符串在文本編輯器中複製,但我希望它們也可用於Finder複製文件。複製到雪豹或以上的文件路徑和url上

我已經寫了下面所示兼容雪豹指南的代碼(例如使用writeObjects當拷貝文件URL)

NSString* path1 = @"/Users/dave/trash/mas.sh"; 
NSString* path2 = @"/Users/dave/trash/books.xml"; 
NSURL* url1 = [NSURL fileURLWithPath:path1 isDirectory:NO]; 
NSURL* url2 = [NSURL fileURLWithPath:path2 isDirectory:NO]; 
NSArray* paths = [NSArray arrayWithObjects:path1, path2, nil]; 

NSString* pathPerLine = [paths componentsJoinedByString:@"\n"]; 
// Put strings on top otherwise paster app receives the url (only the first) 
// Urls will be used by Finder for files operations (copy, move) 
NSArray* urls = [NSArray arrayWithObjects:pathPerLine, url1, url2, nil]; 
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; 
[pasteboard clearContents]; 
[pasteboard writeObjects:urls]; 

但在某些編輯器(如了XCode)也將網址粘貼如下圖所示( Finder使用正確的網址複製/移動)

/Users/dave/trash/mas.sh 
/Users/dave/trash/books.xml 
file://localhost/Users/dave/trash/mas.sh 
file://localhost/Users/dave/trash/books.xml 

我怎麼能只粘貼文件路徑,而無需使用10.6兼容的代碼的文件的URL?

NSFilenamesPboardType用法似乎氣餒

NSFilenamesPboardType NSString對象指定一個或多個文件名的數組。 在Mac OS X v10.6及更高版本中,使用writeObjects:將文件URL寫入粘貼板。 適用於Mac OS X v10.0及更高版本。 在NSPasteboard.h中聲明。

回答

5

該文檔聽起來像只能使用writeObjects:,但您只能將其用於文件URL。

在NSPasteboard.h的底部是本節:

這些都是你不應該使用舊的類型,但它表明你只是試圖把文件的URL(或URL)時使用writeObjects: 。並使用其他數據的類型。

因此,要獲得正確的行爲:

NSString* path1 = @"/Users/dave/trash/mas.sh"; 
NSString* path2 = @"/Users/dave/trash/books.xml"; 
NSURL* url1 = [NSURL fileURLWithPath:path1 isDirectory:NO]; 
NSURL* url2 = [NSURL fileURLWithPath:path2 isDirectory:NO]; 
NSArray* paths = [NSArray arrayWithObjects:path1, path2, nil]; 

NSString* pathPerLine = [paths componentsJoinedByString:@"\n"]; 

//Note, only the URLs not the pathsPerLine 
NSArray* urls = [NSArray arrayWithObjects:url1, url2, nil]; 
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; 
[pasteboard clearContents]; 
[pasteboard writeObjects:urls]; 
//Now add the pathsPerLine as a string 
[pasteboard setString:pathPerLine forType:NSStringPboardType]; 
+0

在10.8只有第一個路徑粘貼,並粘貼有文件://前綴的協議 – dafi 2012-08-21 15:36:37

+0

你的意思與此代碼或在Finder中?我在10.8上,代碼和Finder都粘貼了所有文件名,並且沒有file://前綴。 – 2012-08-21 16:01:56

+0

我運行你的代碼片段(修復了最後一行pathsPerLine中的錯誤pathPerLine),當我粘貼KomodoEdit時,我只在這個表單文件中獲得一個路徑(預期兩個)://localhost/Users/dave/trash/mas.sh ,粘貼到其他應用程序,如TextWranger工作正常 – dafi 2012-08-22 09:35:58