当前位置:  编程技术>.net/c#/asp.net

c#文件的I/O基本操作

    来源: 互联网  发布时间:2014-10-29

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

文件是一些永久存储及具有特定顺序的字节组成的一个有序的,具有名称的集合。与文件有关的概念是目录路径和磁盘存储等。流提供了一种向后备存储写入字节和从后备存储读取字节的方式。后备存储包裹用文件存储或用内存(数组)存储,以及网络,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=0;i0)
{
//s.Read从当前流读取字节序列,并将此流中的位置提升读取的字节数
//返回值n是实际读取的字节数,如果已到达流的末尾则为零(0)
int n=s.Read(   bytes, //数组bytes接收从流中读取的字节
numBytesRead,   //数组bytes的偏移量,从偏移量开始存储数据
numBytesToRead);//请求读取的最大字节数
if(n==0)
{
break;
}
numBytesRead+=n;
numBytesToRead-=n;
}
s.Close();
//现在请求读取的字节数numBytesToRead为0,偏移量numBytesRead应该为100
Console.WriteLine("number of bytes read:"+numBytesRead);
}
}

输出如下:

代码如下:

number of bytes read:100


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 SettingsAdministratorLocal SettingstempTemp10.tmp was copied to
C:Documents and SettingsAdministratorLocal SettingstempTemp11.tmp
C:Documents and SettingsAdministratorLocal SettingstempTemp11.tmp was successfully deleted

    
 
 

您可能感兴趣的文章:

  • c#如何生成Excel(.xls和.xlsx)文件
  • 将ocx文件转换成C#程序引用的DLL文件的办法
  • C#删除文件夹和文件到回收站示例
  • C#逐行读取txt文件的方法
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹) iis7站长之家
  • C# WinForm编程获取文件物理路径的方法
  • C#文件管理类Directory实例分析
  • c#文件夹 递归访问的实现代码
  • c# 删除空文件夹的代码
  • C#清空添加的txt文件的实例代码
  • C#格式化文件大小的实现代码
  • C# 读取配置文件(指定路径)的方法
  • C# 获取程序集版本、文件版本
  • C#实现判断图形文件格式的方法
  • c# 获取目录下文件的代码
  • 用c#获得当前用户的Application Data文件夹位置
  • C# 读取指定路径配置文件的方法
  • C# 执行bat批处理文件的小例子
  • C# 获取系统特殊文件夹路径的方法
  • C#操作txt文件,进行清空添加操作的小例子
  • C#递归实现显示文件夹及所有文件并计算其大小的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • MyEclipse如何查看和设置文件编码格式相关操作
  • 在linux操作系统上向ftp服务器(linux系统)上上传文件,我要纪录操作日志,得到上传到ftp服务器上的文件的路径问题?
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • 请问:如何让对多个现有的文件的写操作成为一个原子操作,并可以实现安全的回滚功能?
  • CentOS yum 源设置为163的源操作步骤及配置文件参考
  • Python文件操作类操作实例详解
  • Linux下u盘文件系统相关操作
  • 客户端如何操作服务器的文件(如查看文件列表,上传,下载)(★)
  • python读文件,写文件操作以及目录操作
  • 什么操作系统能建立文件名大于256的文件
  • 我想按照文件名合并一些文件内容,如何操作
  • linux下如何对文本文件和记录文件进行插入删除操作啊?
  • 文件操作 多个进程打开文件 不加锁 情况如何
  • 急:如何在一个已经打开的文件中定位,比如在文件中实现指针前移和后移这种操作
  • 怎样让DOS支持长文件名,且能用COPY等原命令对长文件名操作?
  • jsp中对文件操作,怎样判断是否已到文件尾?
  • 救命呀,LINUX删除用户操作后,我的WINDOWS文件系统文件丢失了!在线等!
  • 求助文件操作中修改文件中字段的问题,请大家帮忙解决
  • 看到一个问题不错,我也想知道,就转过来,请教各位:如何让虚拟空间用户不能执行他自己文件外的文件操作命令?
  • 怎样用chmod将一个文件夹中所有文件改为777的权限(即可以进行任何操作)
  • 每个线程都进行申请文件描述符的操作的话,会不会发生文件描述符申请冲突?
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3