cbb21 634j400v参数b 364k400v是多少容量

[C#]&读写App.config配置文件的方法
查看原文:
我们经常会希望在程序中写入一些配置信息,例如版本号,以及数据库的连接字符串等。你可能知道在WinForm应用程序中可以利用Properties.Settings来进行类似的工作,但这些其实都利用了App.config配置文件。
本文探讨用代码的方式访问 App.config 的方法。关于 App.config
的使用远比上面提到的用途复杂,因此仅讨论最基本的 appSettings 配置节。
一、配置文件概述:
应用程序配置文件是标准的 XML 文件,XML
标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是configuration。我们经常访问的是appSettings,它是由.Net预定义的配置节。我们经常使用的配置文件的架构是客诉下面的形式。先大概有个印象,通过后面的实例会有一个比较清楚的认识。下面的&配置节&可以理解为进行配置一个XML的节点。
常见配置文件模式:
&configuration&
&configSections&&&&&&&&&&&&&&&&&&&&
//配置节声明区域,包含配置节和命名空间声明
&section& & & & &
& & & & & & & &
//配置节声明
&sectionGroup& & & &
& & & & &//定义配置节组
&section& & & & &
& & & & & & &
&//配置节组中的配置节声明
&appSettings&&&&&&&&&&&&&&&&&&&&&&&
//预定义配置节
&Custom element for configuration
section&&& //配置节设置区域
下面是一个最常见的应用程序配置文件的例子,只有appSettings节:
[code language="xml"]
version=&1.0&
encoding=&utf-8&?&
&configuration&
&appSettings&
key=&connectionstring&
value=&User Source=.;Password=;Initial
Catalog=Provider=SQLOLEDB.1;&
key=&TemplatePATH&
value=&Template&
&/appSettings&
&/configuration&
在预定义的 appSettings
节(注意大小写),有很多的元素,这些元素名称都是&add&,有两个属性分别是&key&和&value&。
.NET 提供了对appSettings节的访问方法。在 .NET 1.0 和 1.1 版本中,可以使用
System.Configuration.ConfigurationSettings.AppSettings["Key"] 来对
key = "Key" 的&add&元素的 value属性
进行访问。
注意:现在.Net FrameWork
2.0中已经明确表示此ConfigurationSettings属性已经废弃,建议改为 ConfigurationManager
或&WebConfigurationManager。
使用 System.Configuration.ConfigurationManager,需要在工程里添加对
system.configuration.dll
程序集的引用。(在解决方案管理器中右键点击工程名称,在右键菜单中选择添加引用,在.NET选项卡下即可找到。)
添加引用后,就可以用 ConfigurationManager.AppSettings["Key"] 来读取对应的值了.
但是,ConfigurationManager.AppSettings
属性是只读的,并不支持修改属性值。这是因为据说微软不太建议我们动态写入app.config文件,而是建议手工配置后,在程序运行时只做静态访问。
如果实在需要在程序中进行修改,也即写入App.Config,请往下看。
二、appSettings配置节的读写操作
读取App.config文件的appSettings节的方法比较简单,可以通过上文中&System.Configuration.ConfigurationManager.AppSettings["Key"]的方法进行访问,但前面也已经说了,该方法不提供写入。
如果希望写入配置文件,可以使用ConfigurationManager对象执行打开配置文件的操作后,将会返回一个Configuration的对象,利用该对象进行操作(增删改查都可以哦)。
下面给出实现的代码(增加引用using System.Configuration名称空间)
[code language="csharp"]
private void AccessAppSettings()
//获取Configuration对象
Configuration config =
System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//根据Key读取&add&元素的Value
string name =
config.AppSettings.Settings[&name&].V
//写入&add&元素的Value
config.AppSettings.Settings[&name&].Value
= &xieyc&;
//增加&add&元素
config.AppSettings.Settings.Add(&url&,
//删除&add&元素
config.AppSettings.Settings.Remove(&name&);
//一定要记得保存,写不带参数的config.Save()也可以
config.Save(ConfigurationSaveMode.Modified);
//刷新,否则程序读取的还是之前的值(可能已装入内存)
System.Configuration.ConfigurationManager.RefreshSection(&appSettings&);
需要注意的是:
1、根据并不存在的Key值访问&add&元素,甚至使用remove()方法删除不存在的元素,都不会导致异常,前者会返回null。
2、add已经存在的&add&元素也不会导致异常,而是concat了已有的Value和新的Value,用","分隔,例如:"olldvalue,newvalue"。
3、在项目进行编译后,在运行目录bin\Debuge文件下,将出现两个配置文件,一个名为&ProjectName.EXE.config&,另一个名为&ProjectName.vshost.exe.config&。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件其实为原代码中&App.config&的同步文件,在程序运行中不会发生更改。
4、特别注意大小写(XML文件是区分大小写的),例如appSettings配置节。
5、可能有读者会想到,既然app.config是标准XML,当然也可以用操纵一般XML文件的方法来读写。这当然是可以的!具体可以看文末参考文献[2]和[3]中的代码,只不过我认为这样就失去了VS提供app.config文件的意义了,还不如自己定义一个配置文件方便。
本文只是粗略地讲了app.config文件中appSettings配置节的访问方法,connectionStrings配置节的操作基本是类似的,也可以自定义配置节。这些高级的用法可以自己体会,VS对app.config这个配置文件的管理还是很强大的,例如WinForm应用程序的Settings设置(可以在IDE中或者通过代码访问)其实也是利用了app.config文件。
参考资料:
[1]&(这篇文章从.NET 1.0 过渡到
2.0,因此额外讲了很多两个版本间的变化)
[2]&(作者不知从哪儿复制的一堆相关内容的大杂烩,也没好好整理,不过还蛮有用)
[3]&(用操控XML文件的方法写的,复杂的情况下岂不疯掉&&)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。主题 : xcode生成的app放在什么位置了?
级别: 新手上路
可可豆: 235 CB
威望: 235 点
在线时间: 30(时)
发自: Web Page
来源于&&分类
xcode生成的app放在什么位置了?&&&
因为我想查看我生成的app的大小,但是编译生成后,products下的app显示为红色,在finder里也打不到这个文件。所以想请教各位,这个文件在什么地方?[ 此帖被kingliang123在 13:07重新编辑 ]
UID: 83747
发帖: 3862
可可豆: 19531 CB
威望: 19402 点
在线时间: 2390(时)
发自: Web Page
红色是没生成吧,如果成功了,右键 show in finder就可以了,一般在build文件夹下。
级别: 新手上路
可可豆: 235 CB
威望: 235 点
在线时间: 30(时)
发自: Web Page
回 1楼(chenxin) 的帖子
可是我点击生成,然后,显示 “build success”。
UID: 83747
发帖: 3862
可可豆: 19531 CB
威望: 19402 点
在线时间: 2390(时)
发自: Web Page
回 2楼(kingliang123) 的帖子
那你show in finder或者在build文件夹下找不到吗?
级别: 骑士
可可豆: 382 CB
威望: 384 点
在线时间: 485(时)
发自: Web Page
去iPhone Simulator目錄下找
發問前請多想想 問題是否能夠從Google搜尋找到 或是從Stackoverflow找到
级别: 新手上路
可可豆: 235 CB
威望: 235 点
在线时间: 30(时)
发自: Web Page
回 4楼(tom) 的帖子
嗯 找到了,谢谢iPhone Simulator在/Users/用户名/Library/Application Support/iPhone Simulator/5.1/Applications然后,生成的app以guid为目录名的目录下,可以通过时间查看是哪个app
级别: 新手上路
可可豆: 17 CB
威望: 17 点
在线时间: 15(时)
发自: Web Page
Re:回 4楼(tom) 的帖子
引用 引用第5楼kingliang123于 13:06发表的 回 4楼(tom) 的帖子 :嗯 找到了,谢谢iPhone Simulator在/Users/用户名/Library/Application Support/iPhone Simulator/5.1/Applications然后,生成的app以guid为目录名的目录下,可以通过时间查看是哪个app 今天我生成的那个app也是红色的。按照这个方法找到了,多谢指点。
级别: 精灵王
可可豆: 3670 CB
威望: 3665 点
在线时间: 679(时)
发自: Web Page
回 6楼(tbfyniiswcy) 的帖子
生成成功,但显示红色,是xcode的牛皮癣顽固bug,苹果这厮万年不肯修改但如果以device编译,红色bug就不存在了
级别: 禁止发言
可可豆: 100 CB
威望: 100 点
在线时间: 27(时)
发自: Web Page
(petsatan)
与版规不符,亲,技术讨论版不允许发广告哦。
该主题已被管理员屏蔽!
级别: 禁止发言
可可豆: 76 CB
威望: 76 点
在线时间: 11(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。visionsky 的BLOG
用户名:visionsky
文章数:225
评论数:145
访问量:1160178
注册日期:
阅读量:5863
阅读量:12276
阅读量:370184
阅读量:1064621
51CTO推荐博文
1.&向项目添加app.config文件:右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”;如果项目以前没有配置文件,则默认的文件名称为“app.config”,单击“确定”。出现在设计器视图中的app.config文件为:&?xmlversion="1.0"encoding="utf-8"&?&&configuration&&/configuration&在项目进行编译后,在bin\Debuge文件下,将出现两个配置文件(以本项目为例),一个名为“JxcManagement.EXE.config”,另一个名为“JxcManagement.vshost.exe.config”。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件为原代码“app.config”的同步文件,在程序运行中不会发生更改。2.&&connectionStrings配置节:请注意:如果您的SQL版本为2005 Express版,则默认安装时SQL服务器实例名为localhost\SQLExpress,须更改以下实例中“Data Source=”一句为“Data Source=localhost\SQLE”,在等于号的两边不要加上空格。&!--数据库连接串--&&&&& &connectionStrings&&&&&&&&& &clear&/&&&&&&&&& &addname="conJxcBook"&&&&&&&&&&&&&&connectionString="Data Source=Initial Catalog=User &&&&&&&&&&&&&&&&&&&&&&& &&&& &&&& ID=password=********"&&&&&&&&&&&&&&providerName="System.Data.SqlClient"&/&&&&& &/connectionStrings&3.&appSettings配置节:appSettings配置节为整个程序的配置,如果是对当前用户的配置,请使用userSettings配置节,其格式与以下配置书写要求一样。&!--进销存管理系统初始化需要的参数--&&&&& &appSettings&&&&&&&&& &clear&/&&&&&&&&& &addkey="userName"value=""&/&&&&&&&&& &addkey="password"value=""&/&&&&&&&&& &addkey="Department"value=""&/&&&&&&&&& &addkey="returnValue"value=""&/&&&&&&&&& &addkey="pwdPattern"value=""&/&&&&&&&&& &addkey="userPattern"value=""&/&&/appSettings&4.读取与更新app.config对于app.config文件的读写,参照了网络文章: SystemConfiguration.asp标题为“Read/Write App.Config File with .NET 2.0”一文。请注意:要使用以下的代码访问app.config文件,除添加引用System.Configuration外,还必须在项目添加对System.Configuration.dll的引用。4.1 读取connectionStrings配置节///&summary&///依据连接串名字connectionName返回数据连接字符串///&/summary&///&param name="connectionName"&&/param&///&returns&&/returns&private&static&string&GetConnectionStringsConfig(string&connectionName){string&connectionString =&&&&&&&&ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();&&&&Console.WriteLine(connectionString);&&&&return&connectionS}4.2 更新connectionStrings配置节///&summary&///更新连接字符串///&/summary&///&param name="newName"&连接字符串名称&/param&///&param name="newConString"&连接字符串内容&/param&///&param name="newProviderName"&数据提供程序名称&/param&private&static&void&UpdateConnectionStringsConfig(string&newName,&&&&string&newConString,&&&&string&newProviderName){&&&&bool&isModified =&false;&&&&//记录该连接串是否已经存在&&&&//如果要更改的连接串已经存在&&&&if&(ConfigurationManager.ConnectionStrings[newName] !=&null)&&& {&&&&&&& isModified =&true;&&& }&&&&//新建一个连接字符串实例&&&&ConnectionStringSettings&mySettings =&&&&&&&&new&ConnectionStringSettings(newName, newConString, newProviderName);&&&&//&打开可执行的配置文件*.exe.config&&&&Configuration&config =&&&&&&&&ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);&&&&//&如果连接串已存在,首先删除它&&&&if&(isModified)&&& {&&&&&&& config.ConnectionStrings.ConnectionStrings.Remove(newName);&&& }&&&&//&将新的连接串添加到配置文件中.&&& config.ConnectionStrings.ConnectionStrings.Add(mySettings);&&&&//&保存对配置文件所作的更改&&& config.Save(ConfigurationSaveMode.Modified);&&&&//&强制重新载入配置文件的ConnectionStrings配置节&&&&ConfigurationManager.RefreshSection("ConnectionStrings");}4.3 读取appStrings配置节///&summary&///返回*.exe.config文件中appSettings配置节的value项///&/summary&///&param name="strKey"&&/param&///&returns&&/returns&private&static&string&GetAppConfig(string&strKey){&&&&foreach&(string&key&in&ConfigurationManager.AppSettings)&&& {&&&&&&&&if&(key == strKey)&&&&&&& {&&&&&&&&&&&&return&ConfigurationManager.AppSettings[strKey];&&&&&&& }&&& }&&&&return&null;}4.4 更新connectionStrings配置节///&summary&///在*.exe.config文件中appSettings配置节增加一对键、值对///&/summary&///&param name="newKey"&&/param&///&param name="newValue"&&/param&private&static&void&UpdateAppConfig(string&newKey,&string&newValue){&&&&bool&isModified =&false;&&&&&&&foreach&(string&key&in&ConfigurationManager.AppSettings)&&& {&&&&&&&if(key==newKey)&&&&&&& {&&&&&&&&&&&&&& isModified =&true;&&&&&&& }&&& }&&&&&// Open App.Config of executable&&&&Configuration&config =&&&&&&&&ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);&&&&// You need to remove the old settings object before you can replace it&&&&if&(isModified)&&& {&&&&&&& config.AppSettings.Settings.Remove(newKey);&&& }&&&&&&&// Add an Application Setting.&&& config.AppSettings.Settings.Add(newKey,newValue);&&&&&&// Save the changes in App.config file.&&& config.Save(ConfigurationSaveMode.Modified);&&&&// Force a reload of a changed section.&&&&ConfigurationManager.RefreshSection("appSettings");}5.加密配置文件此节代码参照Dariush Tasdighi所著文章《Encrypt and Decrypt of ConnectionString in app.config and/or web.config!》,原文载于Configuration_File.asp。请注意:(1)要使用以下的代码访问app.config文件,除添加引用System.Configuration外,还必须在项目添加对System.Configuration.dll的引用; (2)以下示例代码中的DPAPI提供程序为“DataProtectionConfigurationProvider”,这是一种基于机器名和当前用户密码的加密方式。如果计划在多台服务器(Web&场合)上使用相同的加密配置文件,则只有通过&RSAProtectedConfigurationProvider&才能导出加密密钥,并将其导入其他服务器。(3)加密后的配置文件不需要解密即可用上述方法直接读取。5.1&加密connectionStrings配置节///&summary&///加密配置文件中的ConnectionString节///&/summary&///&param name="protect"&true为加密,false为解密&/param&public&static&void&ConnectionStringProtection(&bool&protect){&&&&//取得当前程序的执行路径&&&&string&pathName =&Application.ExecutableP&&&&//&定义Dpapi提供程序的名称.&&&&string&strProvider =&"DataProtectionConfigurationProvider";&&&& System.Configuration.Configuration&oConfiguration =&null;&&& System.Configuration.ConnectionStringsSection&oSection =&null;&&&&&try&&& {&&&&&&&&//&打开配置文件,并取得connectionStrings配置节.&&&&&&& oConfiguration =&&&&&&&&&&&&&&& System.Configuration.ConfigurationManager.OpenExeConfiguration(pathName);&&&&&&&&&if&(oConfiguration !=&null)&&&&&&& {&&&&&&&&&&&&bool&blnChanged =&false;&&&&&&&&&& &oSection = oConfiguration.GetSection("connectionStrings")&as&&&&&&&&&&&&&&& System.Configuration.ConnectionStringsSection;&&&&&&&&&&&&&if&(oSection !=&null)&&&&&&&&&&& {&&&&&&&&&&&&&&&&if&((!(oSection.ElementInformation.IsLocked)) && (!(oSection.SectionInformation.IsLocked)))&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&if&(protect)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&if&(!(oSection.SectionInformation.IsProtected))&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&& blnChanged =&true;&&&&&&&&&& &&&&&&&&&&&&&&&&&//&加密connectionStrings配置节.&&&&&&&&&&&&&&&&&&& oSection.SectionInformation.ProtectSection(strProvider);&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&if&(oSection.SectionInformation.IsProtected)&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&& blnChanged =&true;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&解密connectionStrings配置节.&&&&&&&&&&&&&&&&&&&&&&&&&&& oSection.SectionInformation.UnprotectSection();&&&&&&&&&&&&&&&&&&&&&& &}&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&if&(blnChanged)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&//&如果connectionStrings配置节被更改,则强制保存它.&&&&&&&&&&&&&&&&&&& oSection.SectionInformation.ForceSave =&true;&&&&&&&&&&&&&&&&&&&&//&保存对connectionStrings配置节的更改.&&&&&&&&&&&&&&&&&&& oConfiguration.Save();&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&& }&&&&catch&(System.Exception&ex)&&& {&&&&&&&&throw&(ex);&&& }&&&&finally&&& {&&& }}5.2&加密appSettings配置节///&summary&///加密配置文件中的AppSettings配置节///&/summary&///&param name="protect"&true为加密,false为解密&/param&public&static&void&AppSettingProtection(bool&protect){&&&&//取得当前程序的执行路径&&&&string&pathName =&Application.ExecutableP&&&&// Define the Dpapi provider name.&&&&string&strProvider =&"DataProtectionConfigurationProvider";&&&& System.Configuration.Configuration&oConfiguration =&null;&&& System.Configuration.AppSettingsSection&oSection =&null;&&&&&try&&& {&&&&&&&&// Open the configuration file and retrieve the connectionStrings section.&&&&&&& oConfiguration =&&&&&&&&&&& System.Configuration.ConfigurationManager.OpenExeConfiguration(pathName);&&&&&&&&&if&(oConfiguration !=&null)&&&&&&& {&&&&&&&&&&&&bool&blnChanged =&false;&&&&&&&&&&& oSection = oConfiguration.GetSection("appSettings")&as&&&&&&&&&&&&&&& System.Configuration.AppSettingsSection;&&&&&&&&&&&&&if&(oSection !=&null)&&&&&&&&&&& {&&&&&&&&&&&&&&&&if&((!(oSection.ElementInformation.IsLocked)) &&&&&&&&&&&&&&&&&&&&&& (!(oSection.SectionInformation.IsLocked)))&&&&&&&&&& &&&&&{&&&&&&&&&&&&&&&&&&&&if&(protect)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&if&(!(oSection.SectionInformation.IsProtected))&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&& blnChanged =&true;&&&&&&&&&&&&&&&&&&&&&&&&&&&&// Encrypt the section.&&&&&&&&&&&&&&&&&&& &&&&&&&&oSection.SectionInformation.ProtectSection(strProvider);&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&if&(oSection.SectionInformation.IsProtected)&&& &&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&&&& blnChanged =&true;&&&&&&&&&&&&&&&&&&&&&&&&&&&&// Remove encryption.&&&&&&&&&&&&&&&&&&&&&&&&&&& oSection.SectionInformation.UnprotectSection();&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&& &&&}&&&&&&&&&&&&&&&&&if&(blnChanged)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&// Indicates whether the associated configuration section will be saved even&&&&&&&&&&&&&&&&&&&&&&&//&if it has not been modified.&&&&&&&&&&&&&&&&&&& oSection.SectionInformation.ForceSave =&true;&&&&&&&&&&&&&&&&&&&&// Save the current configuration.&&&&&&&&&&&&&&&&&&& oConfiguration.Save();&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&& }&&&&catch&(System.Exception&ex)&&& {&&&&&&&&throw&(ex);&&& }&&&&finally&&& {&&& }}转载自:
了这篇文章
类别:┆阅读(0)┆评论(0)OC学习篇之-文件的操作 - 移动开发当前位置:& &&&OC学习篇之-文件的操作OC学习篇之-文件的操作&&网友分享于:&&浏览:0次OC学习篇之---文件的操作前一篇文章中我们讲到了OC中的归档和解档操作:http://blog.csdn.net/jiangwei/article/details/,今天我们来介绍OC中文件操作,在之前的文章中,已经接触到了文件的创建了,但是那不是很具体和详细,这篇文章我们就来仔细看一下OC中是如何操作文件的:第一、首先来看一下本身NSString类给我们提供了哪些可以操作文件路径名的方法//
37_FilePathHandle
Created by jiangwei on 14-10-13.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &Foundation/Foundation.h&
int main(int argc, const char * argv[]) {
@autoreleasepool {
//演示路径
NSString *path = @&/Users/jiangwei/file.text&;
//1.返回路径的组成部分
NSArray *array = [path pathComponents];
NSLog(@&%@&,array);
//2.返回路径最后组成部分
NSString *str = [path lastPathComponent];
NSLog(@&%@&,str);
//3.在原有的路径后面追加子目录
//这种方式有一点不好,就是需要添加/
[path stringByAppendingString:@&/appFile.text&];
//不需要添加/
[path stringByAppendingPathComponent:@&appFile.text&];
//4.删除最后的组成部分
str = [path stringByDeletingLastPathComponent];
//删除扩展名(.text被删除了)
str = [path stringByDeletingPathExtension];
//5.获取扩展名
str = [path pathExtension];
//6.添加扩展名
[path stringByAppendingPathExtension:@&.jpg&];
在Java中,我们知道,当我们去操作一个文件的时候,最开始的时候肯定要去构建一个路径,这个路径一般都是String类型的,我们需要定义不同的路径和文件名,OC中也不例外,不过OC中的NSString类在这方面做的可能会更好,下面依次来看一下他的方法:1、将路径进行分割//演示路径
NSString *path = @&/Users/jiangwei/file.text&;
//1.返回路径的组成部分
NSArray *array = [path pathComponents];
NSLog(@&%@&,array);运行结果:返回的一个数组,将路径分割了,但是需要注意的是,第一个是&/&,这个也算是路径的一部分。2、返回路径的最后组成部分//2.返回路径最后组成部分
NSString *str = [path lastPathComponent];
NSLog(@&%@&,str);运行结果:这个直接返回路径的最后一部分,这个如果放在Java中,我们可能需要用到String类的字符串分割技术了,没有这里的方便3、添加子目录/子文件//3.在原有的路径后面追加子目录
//这种方式有一点不好,就是需要添加/
//演示路径
str = [path stringByAppendingString:@&/appFile.text&];
NSLog(@&%@&,str);
//不需要添加/
str = [path stringByAppendingPathComponent:@&appFile.text&];
NSLog(@&%@&,str);这里其实有两种方式可以添加,第一种是直接使用拼接字符串的方式,但是需要手动的添加&/&,第二种方式是NSString提供的,不需要手动的添加&/&运行结果:4、删除最后面的部分和后缀名//4.删除最后的组成部分
str = [path stringByDeletingLastPathComponent];
NSLog(@&%@&,str);
//删除扩展名(.text被删除了)
str = [path stringByDeletingPathExtension];
NSLog(@&%@&,str);运行结果:5、获取扩展名//5.获取扩展名
str = [path pathExtension];
NSLog(@&%@&,str);运行结果:6、添加扩展名//6.添加扩展名
str = [path stringByAppendingPathExtension:@&jpg&];
NSLog(@&%@&,str);运行结果:上面就是总结了NSString类中操作文件路径的一些方法,其实这些操作如果放在Java中做的话,就是需要使用String的分割,拼接等技术了。这里看到OC给我们提供了便捷第二、在来看一下操作文件之前需要了解的一个对象:NSData这个类的作用就是将我们写入到文件中的数据进行编码和解码操作//
Created by jiangwei on 14-10-13.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &Foundation/Foundation.h&
//NSData类型
//是一种存储形式
int main(int argc, const char * argv[]) {
@autoreleasepool {
//存储是有编码方式的,编程字节码
//相当于Java中的解码和编码
NSString *s = @&tsdfsdfsdfsdf&;
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
s = [[NSString alloc] initWithData:data encoding:(NSUTF8StringEncoding)];
//可变对象 NSMutableData 可以追加数据
这个和Java中String直接在构造的时候就可以进行编码和解码了,这里需要使用中间类NSData,当然这个类是不可变的,如果想追加内容的话,需要使用NSMutableData类第三、说完了NSData这个中间类,下面来正式说文件的操作了但是这里对文件的操作,我们放到IOS平台去操作,因为我们后面也是会介绍IOS中文件的操作,所以就直接在这里说了,当然这里的知识会有点冲突,但是我们不关心IOS中的其他技术,只看他的文件操作:1、沙盒文件在IOS中,每个应用程序都是一个沙盒,他们有自己的文件目录,这个目录对其他程序是不可见的,和Android中的/data/data/包名/中的内容差不多,当然IOS中的沙盒目录有三种:Documents:存放长期使用的文件(一般存放目录)Library:系统存放文件tmp:临时文件,app重启时,该目录下得文件清空下面来看一个简单的例子吧://
36_SandBoxFile
Created by jiangwei on 14-10-13.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &UIKit/UIKit.h&
#import &AppDelegate.h&
int main(int argc, char * argv[]) {
@autoreleasepool {
//获取沙盒目录
//默认有三个文件夹
//Documents:存放长期使用的文件(一般存放目录)
//Library:系统存放文件
//tmp:临时文件,app重启时,该目录下得文件清空
//第一种获取方式,我们得到Home目录之后,手动的去拼接Document/Library
NSString *homePath = NSHomeDirectory();
NSLog(@&沙盒目录:%@&,homePath);
//第二种方式,直接使用Api获取
//NSDocumentDirectory:Documents文件夹
//NSLibraryDirectory:Library文件夹
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@&%@&,array);
NSArray *array1 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSLog(@&%@&,array1);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
创建IOS项目和OC差不多:后续的操作就一样了,创建完之后的项目结构:我们在main.m文件中写我们的代码就可以了。下面来看代码://第一种获取方式,我们得到Home目录之后,手动的去拼接Document/Library
NSString *homePath = NSHomeDirectory();
NSLog(@&沙盒目录:%@&,homePath);获取沙盒的home目录,然后我们可以操作在其下面创建子目录了这里有两种方式去创建Document等目录,一种是我们用上面NSString类提供的方法去手动拼接目录还有一种是用系统给我们提供的方法,这两种都是可以的//第二种方式,直接使用Api获取
//NSDocumentDirectory:Documents文件夹
//NSLibraryDirectory:Library文件夹
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@&%@&,array);
NSArray *array1 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSLog(@&%@&,array1);看一下运行结果:第四、了解了程序的沙盒目录,下面继续来看一下操作文件的两个类一、NSFileManager这个类的主要功能是对文件进行操作:创建,复制,剪切,删除等看代码://
39_NSFileManager
Created by jiangwei on 14-10-13.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &UIKit/UIKit.h&
#import &AppDelegate.h&
//NSFileManager:对文件进行操作的,包括复制,粘贴,删除,剪切等操作
int main(int argc, char * argv[]) {
@autoreleasepool {
//------------------创建文件/文件夹
//获取沙盒目录
NSString *homePath = NSHomeDirectory();
//在沙盒目录中创建一个文件file.text
NSString *filePath = [homePath stringByAppendingPathComponent:@&Documents/file.text&];
//NSFileManager是单利模式,所以不能使用alloc+init创建
NSFileManager *manager = [NSFileManager defaultManager];
NSString *str = @&无线互联&;
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
//参数:文件路径、文件内容、文件的属性
BOOL sucess = [manager createFileAtPath:filePath contents:data attributes:nil];
if(sucess){
NSLog(@&文件创建成功&);
NSLog(@&文件创建失败&);
//创建文件夹
NSString *filePaths = [homePath stringByAppendingPathComponent:@&Documents/file&];
//需要传递一个创建失败的指针对象,记录创建失败的信息
BOOL success1 = [manager createDirectoryAtPath:filePaths withIntermediateDirectories:YES attributes:nil error:&error];
if(!success1){
NSLog(@&创建成功&);
NSLog(@&创建失败&);
//--------------------读取文件
//根据路径读取文件内容
NSData *datas = [manager contentsAtPath:filePath];
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s);
//--------------------移动文件/剪切文件
//NSFileManager中没有提供重命名的方法,所以我们可以借助移动的api进行操作
//把filePath移动到targetPath目录中
NSString *targetPath = [homePath stringByAppendingPathComponent:@&Documents/file/file2.text&];
BOOL sucess2 = [manager moveItemAtPath:filePath toPath:targetPath error:nil];
if(sucess2) {
NSLog(@&移动成功&);
NSLog(@&移动失败&);
//--------------------复制文件
BOOL sucess3 = [manager copyItemAtPath:filePath toPath:targetPath error:nil];
if(sucess3){
//复制成功
//复制失败
//--------------------删除文件
//删除之前需要判断这个文件是否存在
BOOL isExist = [manager fileExistsAtPath:filePath];//判断文件是否存在
if(isExist){
BOOL sucess4 = [manager removeItemAtPath:filePath error:nil];
if(sucess4){
//删除成功
//删除失败
//--------------------获取文件的属性
NSDictionary *dic = [manager attributesOfItemAtPath:filePath error:nil];
NSLog(@&%@&,dic);//通过打印我们就可以查看文件属性的一些key
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
1、创建文件//------------------创建文件/文件夹
//获取沙盒目录
NSString *homePath = NSHomeDirectory();
//在沙盒目录中创建一个文件file.text
NSString *filePath = [homePath stringByAppendingPathComponent:@&Documents/file.text&];
//NSFileManager是单利模式,所以不能使用alloc+init创建
NSFileManager *manager = [NSFileManager defaultManager];
NSString *str = @&无线互联&;
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
//参数:文件路径、文件内容、文件的属性
BOOL sucess = [manager createFileAtPath:filePath contents:data attributes:nil];
if(sucess){
NSLog(@&文件创建成功&);
NSLog(@&文件创建失败&);
}NSFileManager内部使用了单例模式,这个后面会说到OC中得单例模式,然后就是构建一个NSData类,最后使用createFileAtPath方法创建文件,不过最后的attributes参数一般是用来给这个文件定义一些属性的,当然文件本身也是有很多默认的属性,比如文件的大小,文件的创建日期等,我们也可以自己在追加一些属性。2、创建文件夹//创建文件夹
NSString *filePaths = [homePath stringByAppendingPathComponent:@&Documents/file&];
//需要传递一个创建失败的指针对象,记录创建失败的信息
BOOL success1 = [manager createDirectoryAtPath:filePaths withIntermediateDirectories:YES attributes:nil error:&error];
if(!success1){
NSLog(@&创建成功&);
NSLog(@&创建失败&);
}从这两个操作看出来,他和Java中的File类很相似的3、读取文件//--------------------读取文件
//根据路径读取文件内容
NSData *datas = [manager contentsAtPath:filePath];
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s);4、剪切文件//--------------------移动文件/剪切文件
//NSFileManager中没有提供重命名的方法,所以我们可以借助移动的api进行操作
//把filePath移动到targetPath目录中
NSString *targetPath = [homePath stringByAppendingPathComponent:@&Documents/file/file2.text&];
BOOL sucess2 = [manager moveItemAtPath:filePath toPath:targetPath error:nil];
if(sucess2) {
NSLog(@&移动成功&);
NSLog(@&移动失败&);
}这里有两个参数:一个是需要移动文件的路径,和需要移动到哪的路径5、复制文件//--------------------复制文件
BOOL sucess3 = [manager copyItemAtPath:filePath toPath:targetPath error:nil];
if(sucess3){
//复制成功
//复制失败
}6、删除文件//--------------------删除文件
//删除之前需要判断这个文件是否存在
BOOL isExist = [manager fileExistsAtPath:filePath];//判断文件是否存在
if(isExist){
BOOL sucess4 = [manager removeItemAtPath:filePath error:nil];
if(sucess4){
//删除成功
//删除失败
}7、操作文件的属性//--------------------获取文件的属性
NSDictionary *dic = [manager attributesOfItemAtPath:filePath error:nil];
NSLog(@&%@&,dic);//通过打印我们就可以查看文件属性的一些key属性一般是NSDictionary二、NSFileHandle这个类主要是对文件进行读写操作的看代码://
40_NSFileHandle
Created by jiangwei on 14-10-13.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &UIKit/UIKit.h&
#import &AppDelegate.h&
//写文件,我们之前使用各种数据结构来存储数据:NSString,NSData,NSDictionary,NSArray等,他们都是有一个writeToFile方法用来写文件的
//纯文本:没有任何格式的数据
//非纯文本:有修饰的数据(字体大小,字体颜色等)
//数组只能将如下类型写入文件,如果包含其他对象,将写入失败:NSNumber,NSString,NSData,NSDate,NSArray,NSDictionary
//数组、字典写入的文件叫做属性文件,可以使用xcode进行编辑
int main(int argc, char * argv[]) {
@autoreleasepool {
//1.-------------------字符串读写文件
NSString *str = @&无线互联&;
NSString *homePath = NSHomeDirectory();
NSString *filePath = [homePath stringByAppendingPathComponent:@&Documents/file.text&];
//现在有这样的场景,第一次把字符串写入到文件中,当我们修改字符串之后,再次写入的时候,但是可能会写入失败
//但是之前的内容也有可能丢失,因为每次在写入新的内容的时候,会剪切之前的内容,所以这里就有可能新的没有写
//成功,旧的文件也丢失了
//所以这时候atomically参数:
//YES:会将新内容先写入到一个缓存文件中,如果写入缓存成功之后,这时候就将这个缓存文件替换旧文件,这样就很安全了
BOOL sucess = [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
if(sucess){
//写入成功
//写入失败
//读取文件内容到字符串中
NSString *str1 = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
//构造方法
//str1 = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSLog(@&%@&,str1);
//2.--------------------NSData读写
//创建NSData的同时读取文件中的内容
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
//NSData转化成NSString
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s);
BOOL sucess1 = [data writeToFile:filePath atomically:YES];
if(sucess1){
//写入成功
//写入失败
//3.--------------------NSArray读写文件
NSArray *array = @[@&zhangsan&,@&lisi&];
//属性文件一般后缀名为.plist
NSString *filePaths = [homePath stringByAppendingPathComponent:@&Documents/array.plist&];
BOOL sucess2 = [array writeToFile:filePaths atomically:YES];
if(sucess2){
//写入成功
//写入失败
NSArray *arrays = [[NSArray alloc] initWithContentsOfFile:filePath];
NSLog(@&%@&,arrays);
//4.---------------------NSDictionary读写文件
NSDictionary *dic = @{@&zhang&:@&zhangsan&,@&li&:@&lisi&};
BOOL sucess3 = [dic writeToFile:filePath atomically:YES];
if(sucess3){
//写入成功
//写入失败
dic = [[NSDictionary alloc] initWithContentsOfFile:filePath];
NSLog(@&%@&,dic);
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
这个类就和Java中的FileInputStream/FileOutputStream类似了其实我们在之前看到归档和解档操作的时候,那就是相当于写文件和读文件操作了。1、字符串直接写入文件//1.-------------------字符串读写文件
NSString *str = @&无线互联&;
NSString *homePath = NSHomeDirectory();
NSString *filePath = [homePath stringByAppendingPathComponent:@&Documents/file.text&];
//现在有这样的场景,第一次把字符串写入到文件中,当我们修改字符串之后,再次写入的时候,但是可能会写入失败
//但是之前的内容也有可能丢失,因为每次在写入新的内容的时候,会剪切之前的内容,所以这里就有可能新的没有写
//成功,旧的文件也丢失了
//所以这时候atomically参数:
//YES:会将新内容先写入到一个缓存文件中,如果写入缓存成功之后,这时候就将这个缓存文件替换旧文件,这样就很安全了
BOOL sucess = [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
if(sucess){
//写入成功
//写入失败
//读取文件内容到字符串中
NSString *str1 = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
//构造方法
//str1 = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSLog(@&%@&,str1);
我们使用拼接的方式创建Documents目录中的file.text文件,然后将字符串内容写入到其中。writeToFile方法进行写入其实OC中的各种数据结构都有这个方法的:NSString,NSData,NSArray,NSSet,NSDirctionary等这里有两点要注意的:1)数组只能将如下类型写入文件,如果包含其他对象,将写入失败:NSNumber,NSString,NSData,NSDate,NSArray,NSDictionary数组、字典写入的文件叫做属性文件,可以使用xcode进行编辑这个就是系统提供的一个属性文件:info.plist这个和Java中的Property文件很类似2)writeToFile方法的第一个参数:automically现在有这样的场景,第一次把字符串写入到文件中,当我们修改字符串之后,再次写入的时候,但是可能会写入失败但是之前的内容也有可能丢失,因为每次在写入新的内容的时候,会剪切之前的内容,所以这里就有可能新的没有写成功,旧的文件也丢失了所以这时候atomically参数:YES:会将新内容先写入到一个缓存文件中,如果写入缓存成功之后,这时候就将这个缓存文件替换旧文件,这样就很安全了2、NSData的内容读写//2.--------------------NSData读写
//创建NSData的同时读取文件中的内容
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
//NSData转化成NSString
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s);
BOOL sucess1 = [data writeToFile:filePath atomically:YES];
if(sucess1){
//写入成功
//写入失败
}3、NSArray的内容读写//3.--------------------NSArray读写文件
NSArray *array = @[@&zhangsan&,@&lisi&];
//属性文件一般后缀名为.plist
NSString *filePaths = [homePath stringByAppendingPathComponent:@&Documents/array.plist&];
BOOL sucess2 = [array writeToFile:filePaths atomically:YES];
if(sucess2){
//写入成功
//写入失败
NSArray *arrays = [[NSArray alloc] initWithContentsOfFile:filePath];
NSLog(@&%@&,arrays);4、NSDirctionary的内容读写//4.---------------------NSDictionary读写文件
NSDictionary *dic = @{@&zhang&:@&zhangsan&,@&li&:@&lisi&};
BOOL sucess3 = [dic writeToFile:filePath atomically:YES];
if(sucess3){
//写入成功
//写入失败
dic = [[NSDictionary alloc] initWithContentsOfFile:filePath];
NSLog(@&%@&,dic);上面说到的系统的info.plist文件就是NSDirctionary三、在来看一下NSFileHandle的其他用法//
41_NSFileHandleTest
Created by jiangwei on 14-10-14.
Copyright (c) 2014年 jiangwei. All rights reserved.
#import &UIKit/UIKit.h&
#import &AppDelegate.h&
//NSFileHandle是对文件内容进行读写
int main(int argc, char * argv[]) {
@autoreleasepool {
//追加数据
NSString *str = @&无线互联&;
NSString *homePath = NSHomeDirectory();
NSString *filePath = [homePath stringByAppendingPathComponent:@&file.test&];
[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];//写入文件
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
//默认是从开始位置写,所以我们需要将写入游标设置到尾部
//从文件的末尾写入
[handle seekToEndOfFile];
NSString *s = @&123&;
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
[handle writeData:data];
//关闭文件
[handle closeFile];
//读取文件
NSFileHandle *handles = [NSFileHandle fileHandleForReadingAtPath:filePath];
//获取文件的大小
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttr = [fileManager attributesOfItemAtPath:filePath error:nil];
NSNumber *fileSize = [fileAttr objectForKey:NSFileSize];
long long sizeValue = [fileSize longLongValue];
//设置偏移量
[handle seekToFileOffset:sizeValue/2];//将偏移量设置到中间位置
//从当前偏移量读到文件末尾
NSData *datas = [handle readDataToEndOfFile];
NSString *s2 = [[NSString alloc] initWithData:datas encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s2);
//一个汉字占用两个字节,有时候可能会将一个汉字分成两半,有乱码的问题,需要注意
//实现复制文件的功能
//使用NSFileHandle只能读写已经存在的文件,不能创建文件,创建文件应该使用NSFileManager
NSString *targetPath = [homePath stringByAppendingPathComponent:@&files.test&];
NSFileManager *fileManagers = [NSFileManager defaultManager];
[fileManagers createFileAtPath:targetPath contents:nil attributes:nil];
//创建读取文件的handle
NSFileHandle *readHandles = [NSFileHandle fileHandleForReadingAtPath:filePath];
//创建写文件的handle
NSFileHandle *writeHandles = [NSFileHandle fileHandleForWritingAtPath:targetPath];
//从当前偏移量读取到文件的末尾
NSData *datass = [readHandles readDataToEndOfFile];
//还有一种方式读取文件,既可以读取文件,也可以读流,功能更强
//[readHandles availableData];
[writeHandles writeData:datass];
//关闭文件
[readHandles closeFile];
[writeHandles closeFile];
//这里有问题,就是读取文件的时候全部读取了,这样会很占内存的,所以我们应该将读取内容进行分段
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
1、对原有的内容进行追加操作//追加数据
NSString *str = @&无线互联&;
NSString *homePath = NSHomeDirectory();
NSString *filePath = [homePath stringByAppendingPathComponent:@&file.test&];
[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];//写入文件
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:filePath];
//默认是从开始位置写,所以我们需要将写入游标设置到尾部
//从文件的末尾写入
[handle seekToEndOfFile];
NSString *s = @&123&;
NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding];
[handle writeData:data];
//关闭文件
[handle closeFile];记得操作完之后,关闭文件,我们在追加文件的时候,只要在将当前游标移动到文件的末尾处即可,默认是在开始处2、读取文件的任何位置内容//读取文件
NSFileHandle *handles = [NSFileHandle fileHandleForReadingAtPath:filePath];
//获取文件的大小
NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *fileAttr = [fileManager attributesOfItemAtPath:filePath error:nil];
NSNumber *fileSize = [fileAttr objectForKey:NSFileSize];
long long sizeValue = [fileSize longLongValue];
//设置偏移量
[handle seekToFileOffset:sizeValue/2];//将偏移量设置到中间位置
//从当前偏移量读到文件末尾
NSData *datas = [handle readDataToEndOfFile];
NSString *s2 = [[NSString alloc] initWithData:datas encoding:NSUTF8StringEncoding];
NSLog(@&%@&,s2);还是设置一下游标的位置即可3、实现文件的复制功能//实现复制文件的功能
//使用NSFileHandle只能读写已经存在的文件,不能创建文件,创建文件应该使用NSFileManager
NSString *targetPath = [homePath stringByAppendingPathComponent:@&files.test&];
NSFileManager *fileManagers = [NSFileManager defaultManager];
[fileManagers createFileAtPath:targetPath contents:nil attributes:nil];
//创建读取文件的handle
NSFileHandle *readHandles = [NSFileHandle fileHandleForReadingAtPath:filePath];
//创建写文件的handle
NSFileHandle *writeHandles = [NSFileHandle fileHandleForWritingAtPath:targetPath];
//从当前偏移量读取到文件的末尾
NSData *datass = [readHandles readDataToEndOfFile];
//还有一种方式读取文件,既可以读取文件,也可以读流,功能更强
//[readHandles availableData];
[writeHandles writeData:datass];
//关闭文件
[readHandles closeFile];
[writeHandles closeFile];
//这里有问题,就是读取文件的时候全部读取了,这样会很占内存的,所以我们应该将读取内容进行分段这里的这种方式是:直接将源文件内容全部读取出来,然后写入到目标文件中,这样做有一个坏处,如果这个文件的内容太大,那么一次读取出那么多内容,内存会爆的,所以应该采用分段读取,这个就用到了上面说到的读取文件的任意位置的内容总结这一篇主要是介绍了文件的操作,对于文件的操作,后面的IOS开发过程中会经常用到,所以也是一个重点,当然还有一点需要说明的是,OC中的文件操作比Java中的文件操作方便多了。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 cbb22225j400v 的文章

 

随机推荐