Ios 检查NSString是否为本地文件
这个问题与其他问题不可重复 我有两种字符串路径指向本地文件路径和远程文件路径,它们可能有HTTP/HTTPS/FTP方案Ios 检查NSString是否为本地文件,ios,objective-c,url,filepath,Ios,Objective C,Url,Filepath,这个问题与其他问题不可重复 我有两种字符串路径指向本地文件路径和远程文件路径,它们可能有HTTP/HTTPS/FTP方案 NSString *path = ... ; // like "https://img.server.com/foo.jpeg" or "/Users/myname/Library/Developer/CoreSimulator/Devices/xxxxx/data/Containers/Data/Application/xxxx/Documents/file.txt" N
NSString *path = ... ; // like "https://img.server.com/foo.jpeg" or "/Users/myname/Library/Developer/CoreSimulator/Devices/xxxxx/data/Containers/Data/Application/xxxx/Documents/file.txt"
NSURL url1 = [NSURL URLWithString:path];
NSURL url2 = [NSURL fileURLWithPath:path];
我检查了scheme
,fileURL
,isFileReferenceURL
属性,它们都不能帮助我确定NSString路径是本地文件路径还是远程文件URL
请帮忙 为什么不检查文件路径的前缀
BOOL bIsFileURL = [path hasPrefix: @"/"];
或者,这可能是一条相对路径吗?
在这种情况下,您可以在远程路径中检查http://、https://或ftp://前缀:
NSString *schemeRegex = @"(?i)^(https?|ftp)://.*$";
BOOL bIsRemoteURL;
bIsRemoteURL = [path rangeOfString:schemeRegex
options:NSRegularExpressionSearch].location != NSNotFound;
在尝试了各种URL示例之后,我认为NSURL类可能不是检查本地文件路径的最终方法。现在我使用以下函数
BOOL IsLocalFilePath(NSString *path)
{
NSString *fullpath = path.stringByExpandingTildeInPath;
return [fullpath hasPrefix:@"/"] || [fullpath hasPrefix:@"file:/"];
}
它包括本地文件路径,如/path/to/foo
,file:///path/to/foo,~/path/to/foo
,。/path/to/foo
到目前为止,它非常有效,但也有一些例外。您的问题是,根据字符串的值,如何确定是否应该使用URLWithString:
或fileURLWithPath:
从NSString
创建NSURL
,URLWithString:
用于一般远程文件url,fileURLWithPath:
用于本地文件路径,我认为。我需要知道源路径是否为本地文件路径。是的,我需要一个更通用的字符串路径函数来验证本地文件路径。正则表达式在这里没有帮助,因为url方案可能是这样的。然后使用这个。文件路径中不能有:,但任何url方案都会有一个。bIsRemoteURL=[path rangeOfString:@]:“选项:NSLiteralSearch]。位置!=NSNotFound;另一方面,如果远程URL没有方案,则无法区分文件或远程URL。您可以检查名称为的本地文件是否存在,但这是有问题的,因为如果没有该方案,文件也可能存在远程url路径。