1.无论:TXT,EPUB,PDF等各种格式的文件,保存到本地的时候,最好都保存成字母或者数字,不要保存成汉字,否则,在取文件的时候,由于编码的问题,各种瓦特

2.如果文件名真的保存成了汉字,那么进行转码的方法是:

[fileName
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];//不这样处理会返回nil];

3.pdf的坑:由于后台返回的文件格式都是dat,需要本地动态判断文件格式,因此在判断PDF的时候,就遇到了很多问题

1. 在NSURL和filePath之间转换的时候,虽然filePath是一个string,但是不能用URL.absoluteString这个方法,应该用URL.path 这个方法,不然后面取不到文件

string转URL的时候,这样:

[NSURL URLWithString:_model.filePath]

2,把文件路径中的.dat 替换成 .pdf,没卵用:

[aFilePath  stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"]

必须重命名文件名

//获取本地的PDF文件
+(CGPDFDocumentRef)pdfRefByFilePath:(NSString *)aFilePath
{
// CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (__bridge CFStringRef)[aFilePath lastPathComponent], NULL, (__bridge CFStringRef)@"files");
// CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
//
CFStringRef path;
CFURLRef url;
CGPDFDocumentRef document;
size_t count; //pdf的扩展名必须重命名一下,才可以取到
NSString* aFilePath2 = [aFilePath stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"];
NSError* error;
//[[NSFileManager defaultManager] moveItemAtPath:aFilePath2 toPath:aFilePath2 error:nil];
NSFileManager* fileManager =[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:aFilePath]) {
//get new resource path with different extension //copy it over
[fileManager copyItemAtPath:aFilePath toPath:aFilePath2 error:&error];
} path = CFStringCreateWithCString (NULL, [aFilePath2 UTF8String],
kCFStringEncodingUTF8);
url = CFURLCreateWithFileSystemPath (NULL, path,
kCFURLPOSIXPathStyle, );
CFRelease (path);
document = CGPDFDocumentCreateWithURL (url);
CFRelease(url);
if (document == nil) {
[fileManager copyItemAtPath:aFilePath2 toPath:aFilePath error:&error];
} // NSString* filePath = [aFilePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// CFStringRef path;
// CFURLRef url;
// CGPDFDocumentRef document;
// filePath = [aFilePath stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"];
// path = CFStringCreateWithCString(NULL, [filePath UTF8String], kCFStringEncodingUTF8);
// url = CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0);
// CFRelease(path);
// document = CGPDFDocumentCreateWithURL(url);
// CFRelease(url); return document; }

iOS 获取本地文件的各种坑的更多相关文章

  1. js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径(转载)

     原文:http://blog.csdn.net/niyingxunzong/article/details/16989947 js/jquery 获取本地文件的文件路劲 获取input框中type= ...

  2. 前端用js获取本地文件的内容

    这里要写成input的形式 调用upload函数 传递的参数就表示所选的文件<input type="file" onchange="upload(this)&qu ...

  3. 使用WWW获取本地文件夹的XML配置文件

    Unity3D读取本地文件可以使用Resources.Load来读取放在Resources文件夹下的文件,如果不是放在该文件夹下,则可以通过WWW类来读取. 譬如读取xml的配置文件. /// < ...

  4. javascript 学习笔记 -- js获取本地文件信息

    JavaScript是跑在浏览器中,所以对于JavaScript读取本地文件不想c++ 和 java那样easy.网上有很多关于读取本地文件的方法,许多是用ActiveXObject控件.Active ...

  5. IOS 获取.plist文件的数据

      @property (nonatomic,strong) NSArray *apps; //获取.plist数据 /**获取plist文件的数组数据*/ -(NSArray *)apps{ if( ...

  6. ios获取本地音乐库音乐很详细 扫描IPHONE本地音乐文件,获得音乐名,歌手名代码示例

    //扫描本地音乐文件,返回艺术家列表 需要库MediaPlayer.framework -(NSArray*) findArtistList { NSMutableArray *artistList  ...

  7. iOS获取本地ip(基本通用)

    今天有个朋友问我怎样訪问手机ip,上网找了几个,用了近200多行代码,最后发现头文件用的居然还是Linux中的,OC没有这个头文件.感觉socket本身应该能够后去自己的ip就试了一下,果然7.8行代 ...

  8. JS获取本地文件并且解析文件内容(XML,TXT)

    $(function(){ $("body").on("change", "#file", function (event) { uploa ...

  9. axios获取本地文件配置步骤

    首先修改一下config文件夹下面的index.js文件里面的配置,如下: 然后 ,通过axios 请求配置的接口 <script> import axios from 'axios' e ...

随机推荐

  1. 浅谈C# 多态的魅力(虚方法,抽象,接口实现)

    前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向对象 ...

  2. pur-ftpd在ubuntu上的安装

    1.安装 apt-get install pure-ftpd 2.建立ftp目录 /var/ftp/public 3.建立ftp用户组 groupadd ftpgroup 4.建立ftp非系统用户 u ...

  3. openstack镜像如何在vmware 环境中运行

    1.云镜像文件下载地址: http://sahara-files.mirantis.com/sahara-juno-spark-1.0.0-ubuntu-14.04.qcow2(安装有sahara-s ...

  4. listview去掉条目间的分割线

    未去掉前: 去掉后: java代码可以这么写: 1          listView.setDivider(null);//去掉条目间的分割线 PS:ListView的几个常用操作 listView ...

  5. JavaBean-- DAO设计模式

    企业分层架构: 资源层:主要是数据库的操作层,里面可以进行各种数据存储,但是这些数据存储操作的时候肯定依靠SQL语句,如果在一个程序中出现过多的SQL语句,JSP页面非常复杂,不便于程序的可重用性 数 ...

  6. 设计模式之建造者模式(Builder)

    一个人活到70岁以上,都会经历这样的几个阶段:婴儿,少年,青年,中年,老年.并且每个人在各个阶段肯定是不一样的呀,我觉得可以说世界上不存在两个人在人生的这5个阶段的生活完全一样,但是活到70岁以上的人 ...

  7. gen_grant_exec.sql

    set echo off feedback off verify off pagesize 0 linesize 120 define v_grantee                 = & ...

  8. FZU 2030 括号问题(回溯)

    两种做法,一种dp,一种dfs,因为这个数据比较小,所以dfs全排列的方式是可以接受的,但是当比较大的时候就不行了,所以dp的方式还是要掌握一下的,我这里是dfs的做法,网上有很多人写的dp,可以去看 ...

  9. POJ 2723 HDU 1816 Get Luffy Out

    二分答案 + 2-SAT验证 #include<cstdio> #include<cstring> #include<cmath> #include<stac ...

  10. string数组转化成int数组

    string idsStr = "1,2,3,4,5"; int[] ids = idsStr.Split(',').Select(Int32.Parse).ToArray();