2012-02-26 5 views
3

ファイルパスをテキストエディタで文字列としてコピーできるようにファイルパスをコピーしたいが、ファイルをコピーするためにFinderでも利用できるようにしたい。私はSnow Leopardのガイドラインに準拠した以下のコードを書いたペーストボードのファイルパスとSnow Leopard以上の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のような)も、URLは以下に示すように貼り付けられます( Finderは私が10.6準拠したコードを使用してファイルのURLなしでのみファイルパスを貼り付けることができますどのように/移動)

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

をコピーするURLを正しく使用していますか?

NSFilenamesPboardType使用がNSFilenamesPboardType 一つ以上のファイル名を指定するのNSStringオブジェクトの配列

を落胆思われます。 Mac OS X v10.6以降では、ファイルURLをペーストボードに書き込むにはwriteObjects:を使用します。 Mac OS X v10.0以降で使用できます。 NSPasteboard.hで宣言されています。

答えて

5

ドキュメントは、writeObjects:を使用する必要があるように聞こえますが、ファイルURLにのみ使用してください。 NSPasteboard.hの下部に

は、このセクションです:

は、これらはあなたが使用してはならない古いタイプのですが、それは、ファイルのURL(またはURL)を入れしようとしたときにのみ、writeObjects:を使用することを示しています。他のデータには型を使用します。 10.8の下で

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

のみ、最初のパスが貼り付けられ、それがファイルに貼り付けられます:

だから、正しい動作を取得する//プレフィックスプロトコル – dafi

+0

あなたは、このコードまたはFinderで意味しますか?私は10.8で、コードとFinderの両方ですべてのファイル名が貼り付けられ、file://プレフィックスはありません。 –

+0

私はあなたのスニペットを実行します(最後の行でエラーを修正した後、pathsPerLineはpathPerLineです)。そして、私がKomodoEditに貼り付けると、このフォームファイルで1つのパス(期待される2つ)を取得します://localhost/Users/dave/trash/mas.sh TextWrangerのような他のアプリケーションを貼り付けてもうまく動作します – dafi

関連する問題