Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查NSString是否为本地文件_Ios_Objective C_Url_Filepath - Fatal编程技术网

Ios 检查NSString是否为本地文件

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

这个问题与其他问题不可重复

我有两种字符串路径指向本地文件路径和远程文件路径,它们可能有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"

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路径。