System.IO命名空间包含允许在数据流和文件上进行同步,异步及写入的类型,下面是关于c#文件的I/O基本操作讲解,需要的朋友可以参考下

文件是一些永久存储及具有特定顺序的字节组成的一个有序的,具有名称的集合。与文件有关的概念是目录路径和磁盘存储等。流提供了一种向后备存储写入字节和从后备存储读取字节的方式。后备存储包裹用文件存储或用内存(数组)存储,以及网络,CD等。

基本文件的I/O

命名空间为System.I/O,程序集为mscorlib(在mscorlib.dll中)
抽象基类Stream支持读取和写入字节。Stream集成了异步支持,其默认实现根据其相应的异步方法来定义同步读取和写入。
所有表示流的类都是从Stream类继承的。Stream类及其派生类提供数据源和存储库的一般视图,使程序员不必了解操作系统和基础设备的具体细节。
流涉及3个基本操作:从流读取,向流写入以及查找和修改流内当前位置。根据基础数据源或存储库,流可能只支持这些功能中的一部分。例如,NetworkStream不支持查找。Stream的CanRead,CanWrite和CanSeek属性及其派生类决定不同的流所支持的操作。

Stream类

stream是所有流的抽象基类。流是字节序列的抽象概念,如文件,输入输出设备,内部进程通信管道或TCP/IP套接字。Stream类及其派生类提供这些不同类型的输入输出的一般视图,使程序员不必了解操作系统和基础设备的具体细节。
如果用MemoryStream初始化流,流的后备存储是内存,容量随数据动态的增加。如果用FileStream初始化流,流的后备存储是文件,对流的操作视同对文件的操作。

下面的例子使用Stream..WriteByte和Stream..Read写入和读取数据块

using System;
using System.IO;
public class Block
{
public static void main()
{
Stream s=new MemoryStream();//产生一个流,它的后备存储是内存
//将一个字节写入流内的当前位置,位置推进一个字节
for(int i=;i<;i++)
{
s.WtriteByte((byte)i);
}
s.Positon=;//流中位置设置为0
byte[]betes=new byte[];
//请求从流中读取的最大字节数等于流的长度
int numBytesToRead=(int)s.Length;
int numBytesRead=;//偏移量设置为0
while(numBytesToRead>)
{
//s.Read从当前流读取字节序列,并将此流中的位置提升读取的字节数
//返回值n是实际读取的字节数,如果已到达流的末尾则为零(0)
int n=s.Read( bytes, //数组bytes接收从流中读取的字节
numBytesRead,  //数组bytes的偏移量,从偏移量开始存储数据
numBytesToRead);//请求读取的最大字节数
if(n==)
{
break;
}
numBytesRead+=n;
numBytesToRead-=n;
}
s.Close();
//现在请求读取的字节数numBytesToRead为0,偏移量numBytesRead应该为100
Console.WriteLine("number of bytes read:"+numBytesRead);
}
}

输出如下所示:

number of bytes read:

=======================================================

File类
file类提供用于创建,复制,删除,移动和打开文件的静态方法,并协助创建FileStream对象。也可将File类用于获取和设置文件属性或有关文件创建,访问及写入操作的DateTime信息。由于所有的File方法都是静态的,因此如果只想执行一个操作,则使用File方法的效果比使用相应的FileInfo实例方法可能更高
下面演示File类的一些主要成员。代码中使用Using语句定义一个范围。将下面的代码放入Main方法。

string path=@"..\...\MyTest.txt";//MyTest.txt位于项目的文件夹
if(!File.Exits(path))
{
//using语句用于定义一个范围,再次范围的末尾将释放对象sw
//StreamWriter实现一个TextWriter,使其以特定的编码UTF-8向流中写入字符
//File.CreateText创建或打开一个文件用于写入UTF-8编码的文本
using(StreamWriter sw=FIle.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("AND");
sw.WriteLine("Welcome");
}
}
//使用StreamReader读取标准文本文件的各行信息
using (StreamReader sr=File.OpenText(path))
{
string s="";
//从当前的流中读出一行字符将数据作为字符串返回
while((s=sr.ReadLine())!=null)
{
//显示Mytext.txt的内容“Hello/And/Welcome”到屏幕
Console.WriteLine(s);
}
}
try
{
string path2=path+"temp";
File.Delete(path2);//确保目标文件不存在
File.Copy(path,path2);//复制文件
Console.WriteLine("{0}was copied to {1}",path,path2);
File.Delete(path2);
Console.WriteLine("{0}was successfully deleted.",path2);
}
catch(Exception e)
{
Console.WriteLine("The process failed:{0}",e.ToString());
}

运行结果为程序在本项目文件夹建立一个文本文件MyText.txt,屏幕显示为:

Hello/And/Welcome
..\..\myTest.txt was copied to..\..\myTest.txttemp
..\..\myTest.txt was successfully deleted

======================================================

FileInfo类

FileInfo类提供创建,复制,删除,移动和打开文件的实例方法,并且帮助创建FileStream对象,如果打算多次重用某个对象,可考虑使用FileInfo的实例方法,而不是File类的相对静态方法,以内并不总是需要安全检查
下面的例子是使用FileInfo构造函数创建两个文件,并接着对其进行写入,读取,复制和删除操作

string path=@"..\..\MyText.txt"
FileInfo fil=new FileInfo(path);//FileInfo提供的方法是非静态方法,必须实例化
if(!fil.Exists)
{
using(StreamWriter sw=fil.CreaterText())
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
using(StreamReader sr=fil.OpenText())
{
string s="";
while((s=sr.ReadLine())!=null)
Console.WriteLine(s);
}
try
{
string path2=path+"temp";
FileInfo fi2=new FileInfo(path2);
fi2.Delete();//确保目标文件不存在
fi1.CopyTo(path2);//复制文件
Console.WriteLine("{0}was copied to {1}",path,path2);
fi2.Delete();
Console.WriteLine("{0}was successfully deleted",path2);
}
catch(Exception e)
{
Console.WriteLine("The process failed:{0}",e.Tostring());
}

运行输出结果为:

Hello/And/Welcome
..\..\myTest.txt was copied to..\..\myTest.txttemp
..\..\myTest.txt was successfully deleted

下面的一个例子是显示FileInfo的一些主要成员:

//创建磁盘上给你唯一命名的零字节的临时文件并返回该文件的完整路径
//此方法创建带.TMP文件拓展名的临时文件
string path=Path.GetTempFileName();
//初始化FileInfo类的新实例,它作为文件路径的包装
FileInfo fil=new FileInfo(path);
if(!fil.Exists)
{
//fil.CreateText创建吸入新文本文件的StreamWriter
//默认情况下,将向所有用户授予对于新文件的完全读写访问权限
using(StreamWriter sw=fil.CreateText())
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
using(StreamReader sr=fil.OpenText())//打开文件读取
{
string s="";
while((s=sr.ReadLine())!=null)
Console.WriteLine(s);
}
try
{
string path2=Path.GetTempFileName();
FileInfo fi2=new FileInfo(path2);
fi2.Delete();
fi1.CopyTo(path2);
Console.WriteLine("{0}was copied to{1}",path,path2);
fi2.Delete();
Console.WriteLine("{0}was successfully deleted.",path2)
}
catch(Exception e)
{
Console.WriteLine("The process failed:{0}",e.ToString());
}

输出结果如下:

C:\Documents and Settings\Administrator\Local Settings\temp\Temp10.tmp was copied to
C:\Documents and Settings\Administrator\Local Settings\temp\Temp11.tmp
C:\Documents and Settings\Administrator\Local Settings\temp\Temp11.tmp was successfully deleted

C#对文件I/O的一些基本操作的更多相关文章

  1. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

  2. python之最强王者(10)———文件(File)、输入输出的基本操作

    1. Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 2.打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式. ...

  3. JS文件写法操作,DOM基本操作

     js文件写法.规范 // 定义全局变量 var num = 0;//这个是用来记数的. // 页面加载完成 window.onload = funtion(){ intVar();//初始化变量 s ...

  4. python中对文件、文件夹,目录的基本操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目 ...

  5. 编辑文件 vi,vim的基本操作

    vim   文件名字进入文件后   按i  进行编辑编辑确认后   按 Esc  停止编辑然后              按:   输入  wq     (是root权限时才行:若是强制修改 需要  ...

  6. Linux基本操作——文件相关

    一.前言 无论是IC工程师.FPGA工程师还是嵌入式软件工程师,都或多或少会接触到Linux操作系统.有很多EDA工具只有Linux版本,因此掌握基本的操作和常用命令十分必要.Linux中的数据均以文 ...

  7. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  8. 【原创】日志文件清理工具V1.0

    最近公司的系统服务器经常出现磁盘空间不足的情况,登陆服务器发现原来是公司的HR系统日志造成的(插个话题:我们公司的HR系统都实施两年多了还没上线,且不说软件功能如何,服务太TMD差劲了,更可气的是软件 ...

  9. 你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?

    2.2  基本输入/输出流 听过HelloWorld.exe的自我介绍之后,大家已经知道了一个C++程序的任务就是描述数据和处理数据.这两大任务的对象都是数据,可现在的问题是,数据不可能无中生有地产生 ...

随机推荐

  1. idea运行main方法报错,提示Shorten command line for xxx

    在Intell IDEA运行main函数的时候遇到了如下错误: Error running' xxxxxx': Command line is too long. Shorten command li ...

  2. threejs和particles.js

    particles.js 在线配置的东西: http://vincentgarreau.com/particles.js/ https://threejs.org/ http://thehuub.co ...

  3. android--------根据文件路径加载指定文件

    Android根据指定的文件路径,加载该路径下指定文件格式(图片格式 png, gif,jpg jpeg)的文件相关信息的列表. 如图: public class MainActivity exten ...

  4. 我的Java学习笔记 -开发环境搭建

    开始学习Java~ 一.Java简介 Java编程语言是一种简单.面向对象.分布式.解释型.健壮安全.与系统无关.可移植.高性能.多线程和动态的语言. Java分为三个体系: JavaSE(J2SE) ...

  5. 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法

    1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G   #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...

  6. hdu-2147-博弈

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  7. 硬盘分区表知识——详解硬盘MBR (转)

    Ref: http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神 ...

  8. dubbo管理控制台搭建

    1. 从网上下载dubbo管理控制台:dubbo-admin-2.5.4.war 2. 下载tomcat7,解压缩 3. 将tomcat7 webapps/ROOT的文件全部删除,然后把dubbo-a ...

  9. Log4j在Java工程中使用方法

    Eclipse新建Java工程,工程目录如下 1.下载log4j的Jar包,在Java工程下新建lib文件夹,将jar包拷贝到此文件夹,并将其加入到路径中,即:Jar包上右键——Build Path— ...

  10. 用MyEclipse JPA创建项目(三)

    MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于PA的功能. 阅读本教程时,了解J ...