2 starwar2012 starwar2012 于 2013.01.30 10:30 提问

在iphone中打开文件系统报出不可读

在iphone应用中打开文件,NSFileManager isReadableFileAtPath 返回 NO
代码:

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    if (url != nil && [url isFileURL]) {
        NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

        if ( [[NSFileManager defaultManager] isReadableFileAtPath:[url absoluteString]] ) {
            NSLog(@"READABLE!");
            [[NSFileManager defaultManager] copyItemAtPath:[url absoluteString] toPath:[documentsPath stringByAppendingString:@"/timecode.xml"] error:nil];
        } else {
            NSLog(@"NOT READABLE!");
        }

        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:[documentsPath stringByAppendingString:@"/timecode.xml"]];

        if (fileExists) {
            NSLog(@"THERE!");
        } else {
            NSLog(@"NOT THERE!");
        }
    }
}

不知为啥如果我从邮箱应用(还有一些其他应用)打开文件到我自己的文件,系统就会提示不可读。

1个回答

g989_1314125
g989_1314125   2013.01.30 13:45
已采纳

这是由于URL不是一个路径

[url absoluteString]

比如:

file:///var/mobile/XXXXXXXX/MyApp.app/Documents/foo.txt

你需要使用:

[url path]

还有,两个注释:

url != nil && [url isFileURL]

非常多余

[url isFileURL]

如果URL是nil,就会返回NO

[documentsPath stringByAppendingString:@"/timecode.xml"]

不要重新发明,试试拆分路径分隔符,这行应该是这样的:

[documentsPath stringByAppendingPathComponent:@"timecode.xml"]
flyingcut
flyingcut 很容易被忽略的一个问题,碰到两回了=。=!
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
嵌入式Linux 的Cramfs 根文件系统配置成可读可写
嵌入式Linux 的Cramfs 根文件系统配置成可读可写   1、概述        从软件角度上看,构建基于ARM技术的linux系统要涉及到引导加载程序、Linux内核、文件系统、用户应用程序几部分的设计。文件系统是操作系统中用来管理用户文件的内核软件层。文件可能存在于磁盘、网络或者是一些虚拟的文件。文件系统包括根文件系统和建立于内存设备之上文件系统。根
常用app在iphone文件系统中的位置
<br />pdf expert 打开文件位置 /private/var/mobile/Documents<br />熊猫看书 打开文件位置 /private/var/mobile/Media/EBooks<br />... to be continue
C# 流不可读 解决办法
C# 流不可读 解决办法
Linux内核驱动学习(二)----根文件系统的构成 (root filesystem)
1、建立根文件系统目录和文件 1.1创建目录 1.2创建设备文件(命令mknod);必须创建设备文件---consle\null 1.3创建配置文件---复制已有的/etc目录下的文件 1.4添加内核模块 进入上节Linux内核目录下,(注意,应该先编译内核,即命令make uImage ARCH=arm  CROSS_COMPILE=arm-
根文件系统和yaffs2还有jffs2文件系统制作
1.最小得跟文件系统制作   根据busybox源码可知,最小的根文件系统要具备如下条件: 第一.init(来源于busybox,主要是一些命令,如cp,ls等,等编译busybox时,就得到) 第二./dev/console 和/dev/null(open()打开设备) 第三./etc/inittab 第四.配置指定的程序 第五.C库(r如:标准输入,输出,错误等) --根据韦东
Linux 创建文件系统及挂载文件系统流程详解
 必须具备知识点:《Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍》《实例解说 fdisk 使用方法》《合理规划您的硬盘分区》《Fedora / Redhat 软件包管理指南》如果您想加载一个分区(文件系统),首先您得确认文件系统的类型,然后才能挂载使用,比如通过mount 加载,或者通过修改 /etc/fstab来开机自动加载;如果您想添加一个新的分区,或者增加一个
iPhoneExplorer_2005
用于在PC上打开iphone文件系统的软件,很好用
Unity文件目录的读写
转载自:http://forum.china.unity3d.com/thread-1516-1-1.html streamingAssetsPath (只读目录) pc     可以通过www和stream读取,注意win平台www协议需要三个/即file:///,但试验中貌似两个//也行。 android     只能通过www读取,因为该文件夹在jar包
Linux下的C文件系统编程
Linux下的C文件系统编程1.Linux文件系统 Linux支 持多种文件系统,如ext、ext2、minix、iso9660、msdos、fat、vfat、nfs等。在这些具体文件系统的上层,Linux提供 了虚拟文件系统(VFS)来统一它们的行为,虚拟文件系统为不同的文件系统与内核的通信提供了一致的接口。下图给出了Linux中文件系统的关系: 在Linux平台下对
SquashFS 可读写文件系统
基于 SquashFS 构建 Linux 可读写文件系统 - 摩斯电码 时间 2014-01-15 19:41:00  博客园-所有随笔区 原文  http://www.cnblogs.com/pengdonglin137/p/3521408.html 主题 文件系统 Linux 在当前的嵌入式操作系统开发中,Linux 操作系统通常被压缩成 Image 后存放在 Fl