Copia per pascolare i percorsi del file e gli URL su Snow Leopard o sopra
-
13-11-2019 - |
Domanda
Voglio copiare i percorsi dei file negli Appunti in modo che possano essere copiati in editor di testo come stringhe ma li voglio anche a disposizione per il cercatore per copiare i file.
Ho scritto il codice mostrato di seguito conformi alle linee guida di Snow Leopard (ad esempio Utilizzare Wriwobjects quando copia gli URL del file)
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];
.
Ma su alcuni editor (come XCode) anche gli URL sono incollati come mostrato di seguito (Finder utilizza correttamente gli URL per copiare / spostare)
/Users/dave/trash/mas.sh
/Users/dave/trash/books.xml
file://localhost/Users/dave/trash/mas.sh
file://localhost/Users/dave/trash/books.xml
.
Come posso incollare solo i percorsi dei file senza gli URL dei file utilizzando 10.6 Codice conforme?
the nsfilenamespboardtype Utilizzo sembra scoraggiato
.nsfilenamespboardtype Una serie di oggetti NSString che progetta uno o più nomi di file. Su Mac OS X V10.6 e versioni successive, utilizzare WriversObjects: per scrivere gli URL di file su Pasteboard. Disponibile in Mac OS X V10.0 e in seguito. Dichiarato in nspasteboard.h.
Soluzione
La documentazione può suonare come è necessario utilizzare solo writeObjects:
, ma usi solo questo per gli URL del file.
Nella parte inferiore di nspasteboard.h è questa sezione:
APPKIT_EXTERN NSString *NSStringPboardType; // Use NSPasteboardTypeString
APPKIT_EXTERN NSString *NSFilenamesPboardType; // Use -writeObjects: to write file URLs to the pasteboard
.
Questi sono i vecchi tipi che non dovresti usare, ma mostra che usi solo writeObjects:
durante il tentativo di inserire URL (o URL) del file.E utilizzare i tipi per altri dati.
Quindi per ottenere il comportamento corretto:
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];
.