4

我正在实现我的拖放方法。我需要当用户在我的应用程序窗口上拖动某些东西时,我可以获得该文件的 URL。NSURL需要转换为char. 没关系。但是如何file://从网址中删除?我当前的代码:

pboard = [sender draggingPasteboard];
NSString *url = [[NSURL URLFromPasteboard:pboard] absoluteString];
input_imageN = strdup([url UTF8String]);

没关系,但它给出了带有file://前缀的 url。我尝试使用

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];
NSString *url = [fileUrl absoluteString];
NSLog(@"url: %@", [NSURL URLFromPasteboard:pboard]);
input_imageN = strdup([url UTF8String]);

但它说

Cannot initialize a variable of type 'NSURL *' with an rvalue of type 'BOOL' (aka 'signed char')

NSURL *fileUrl = [[NSURL URLFromPasteboard:pboard] isFileURL];
4

4 回答 4

16

要在文件系统的适当表示中以 C 字符串形式从文件 URL 转到路径,您可以:

NSURL *fileURL = [NSURL URLFromPasteboard: pboard];
NSString *filePath = [fileURL path];
char *filesystemRepresentation = [filePath filesystemRepresentation];

这避免了剥离方案只留下路径的假设,或者文件系统肯定很乐意接受 UTF8 编码的路径。

于 2012-07-19T10:44:42.670 回答
5
url = [url stringByReplacingOccurencesOfString:@"file://" withString:@""];

希望这可以帮助。干杯!

于 2012-07-19T10:18:19.783 回答
2

@user23743 的回答是正确的。由于 iOS 7 虽然NSURL有自己的filestSystemRepresentation方法。

在斯威夫特:

if let fileURL = NSURL(fromPasteboard: pboard) {
    let representation = fileURL.fileSystemRepresentation
}
于 2016-03-09T05:48:08.457 回答
2
if let fileURL = NSURL(from: pboard)?.filePathURL {
}

对我来说是最有效的。

于 2017-01-17T03:06:35.893 回答