C#文件

文件


  文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个流。

  从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。

System.IO.File类和System.IO.FileInfo类主要提供用于执行各种文件的操作,如创建和删除文件、读取或写入文件,打开或关闭文件等。另外有时我们还会用到System.IO.Path类、Directory类等,在使用时要引用System.IO命名空间。

File类常用方法


  C#File类为我们提供了一些对文件的操作方法,下面就为大家介绍一些: 文件创建方法:File.Create

  该方法的声明如下:public static FileStream Create(string path)。下面的代码演示如何在当前目录下创建名为e1.txt的文件。

FileStream NewText=File.Create(@"e1.txt");
NewText.Close();

文件打开方法:File.Open

  该方法的声明如下:public static FileStream Open(string path, FileMode mode)。下面的代码打开存放在当前目录下名称为e1.txt文件,并在该文件中写入hello。

FileStream TextFile=File.Open(@"e1.txt",FileMode.Append); //以打追加方式打开文件
byte [] Info={(byte)'h',(byte)'e',(byte)'l',(byte)'l',(byte)'o'};
TextFile.Write(Info,0,Info.Length); //写入数据
TextFile.Close(); // 关闭文件

文件删除方法:File.Delete

  该方法声明如下:public static void Delete(string path)。下面的代码演示如何删除当前目录下的e1.txt文件。

File.Delete(@"e1.txt");

判断文件是否存在的方法:File.Exist

  该方法声明如下:public static bool Exists(string path);下面的代码判断是否存在e1.txt文件。

if(File.Exists(@"e1.txt")) //判断文件是否存在
{…}//处理代码

Path类


  对一个路径做相应操作,包括文件路径,目录路径。通常会用到Path这个类。下面就介绍Path类提供的一些方法。

1.更改路径字符串的扩展名

public static string ChangeExtension(string path,string extension)

参数:path(String)为要修改的路径信息,extension(String)为新的扩展名;返回值为String型修改后的路径字符串。

string s =Path.ChangeExtension(@"course\demo.cs", "");//返回:"course\demo."

2.合并两个字符路径字符串

public static string Combine(string path1,string path2)

参数:path1(String)为第一个路径,path2(String)为第二个路径;返回值为String型合并后的路径字符串。

string path1 = @"course";
string path2 = @"install.txt";
string s4 = Path.Combine(path1, path2);
//返回:"course/install.txt"

3.获取指定路径字符串的目录信息

public static string GetDirectoryName(string path)

如下代码实例:

string fileName = @"a.txt";
Path.GetDirectoryName(fileName);

4.获取指定路径字符串的扩展名

public static string GetExtension(string path)
string fileName = @""course\myfile.ext"";
string path = @"course\mydir\";
string extension=Path.GetExtension(fileName); //返回 : ".ext"
string pe=Path.GetExtension(path); //返回 :""

Directory类


  Directory类位于System.IO 命名空间。Directory类提供了在目录和子目录中进行创建移动和列举操作的静态方法。此外,你还可以访问和操作各种各样的目录属性。

1.目录创建方法:public static DirectoryInfo CreateDirectory(string path);

Directory.CreateDirectory(@"course\NewDirectoty");

2.目录删除方法:public static void Delete(string path,bool recursive);

Directory.Delete(@"course\NewDirectoty",true);

3.获取当前目录下的所有子目录名的方法:public static string[] GetDirectories(string path);

string [] Directorys;
Directorys = Directory. GetDirectories (@"course");

4.获取当前目录下的所有文件名的方法:public static string[] GetFiles(string path);

string [] Files;
Files = Directory.GetFiles (@"course");

5.判断目录是否存在方法:public static bool Exist(string path);

if(File.Exists(@"course")) //判断目录是否存在
{
    GetDirectory(); //获取子目录
    GetFile(); //获取文件
    MoveDirectory(); //移动目录
    DeleteDirectory(); //删除目录
}
else
{
    MakeDirectory(); //生成目录
    SetDirectory(); //设置目录属性
}

文件的读写


FileStream类读写文件

  使用 System.IO 命名空间中的 FileStream 类读写文件。该类派生自抽象类 Stream。如下代码:

/*----------读取文件-----------*/
byte[] byData = new byte[100];
FileStream sFile = new FileStream("a.txt",FileMode.Open); //读取a.txt的内容
sFile.Seek(0, SeekOrigin.Begin); //设置流的当前位置为文件的开始位置;
sFile.Read(byData, 0, 100); //将文件的内容读入到字节数组中;
 
/*----------写入文件-----------*/
FileStream fs = new FileStream("b.txt",FileMode.Create); //创建要写入数据的文件
byte [] data =new UTF8Encoding().GetBytes("hello world!"); //将要写的内容存入字节数组中
fs.Write(data,0,data.Length); //写入字节数据
fs.Flush();
fs.Close(); //关闭文件

使用StreamReader和StreamWriter类

  StreamReader类提供了读取文件的方法,而StreamWriter类提供了写入文件的方法。

/*----------读取文件-----------*/
FileStream fs = File.Open("a.txt", FileMode.Open, FileAccess.Read); // 打开文件a.txt
StreamReader sr=new StreamReader(fs, Encoding.GetEncoding("gb2312")); //声明并初始化StreamReader
string line=sr.ReadLine(); //通过StreamReader的ReadLine方法读取一行数据
sr.Close();
fs.Close();
 
/*----------写入文件-----------*/
FileStream fs = new FileStream("bb.txt", FileMode.Create); //创建要写入数据的文件
StreamWriter sw = new StreamWriter(fs); //声明并初始化StreamReaderWriter
sw.Write("123"); // 通过StreamWrite的Write方法写入数据
sw.Flush();
fs.Close();

内存流


  流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。

 我们在文件的读写中已经介绍了文件流,像FileStream,在这里我们再来介绍一下MemoryStream类,继承自Stream类。

  MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。下面列出了MemoryStream类的重要方法:

  1. Read():读取MemoryStream流对象,将值写入缓存区。
  2. ReadByte():从MemoryStream流中读取一个字节。
  3. Write():将值从缓存区写入MemoryStream流对象。
  4. WriteByte():从缓存区写入MemoytStream流对象一个字节。
using System;
using System.IO;
using System.Text;
namespace MemoryStreamApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //构造MemoryStream实例,并输出初始分配容量及使用大小
            MemoryStream mem = new MemoryStream();
            Console.WriteLine("init total size:{0}", mem.Capacity);
            Console.WriteLine("init use size:{0}", mem.Length);
            //将待写入的数据从字符串转换为字节数组
            UnicodeEncoding encoder = new UnicodeEncoding();
            byte[] bytes = encoder.GetBytes("add data");
            //向内存流中写入数据
            for (int i = 1; i < 4; i++)
            {
                Console.WriteLine("write data {0} times.", i);
                mem.Write(bytes, 0, bytes.Length);
            }
            //写入数据后 MemoryStream 实例的容量和使用大小
            Console.WriteLine("now size:{0}", mem.Capacity);
            Console.WriteLine("already used size:{0}", mem.Length);
        }
    }
}    

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java相关

设计模式之—1.单例模式

单例模式实现方式有多种,其中比较简单的实现方式是直接定义一个private的属性,并直接初始化。相关实现如下:

1123
来自专栏闻道于事

单例模式你会几种写法?

1155
来自专栏Java开发者杂谈

JDK1.7新特性(3):java语言动态性之脚本语言API

简要描述:其实在jdk1.6中就引入了支持脚本语言的API。这使得java能够很轻松的调用其他脚本语言。具体API的使用参考下面的代码: 1 package...

29610
来自专栏诸葛青云的专栏

教你彻底学会c语言基础——文件操作

函数定义:FILE *fopen(char *pname, char *mode)

1612
来自专栏JavaEE

java基础知识02

1、String字符串: 字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中。用length()方法获取长度。

722
来自专栏任浩强的运维生涯

mongodb高级应用

一、  高级查询 查询操作符 条件操作符:db.collection.find({“field”:{$gt/$lt/$gte/$lte/$eq/$ne:valu...

36310
来自专栏用户2442861的专栏

Java IO学习笔记(一):File类

http://www.cnblogs.com/lich/archive/2011/12/10/2283445.html

631
来自专栏Albert陈凯

2018-06-13 如何优雅高效的创建单例——枚举Enum

2365
来自专栏Java学习网

Java中application对象的19个常用方法

applicaton表示一个javax.servlet.ServletContext对象。他实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服...

2385
来自专栏钟绍威的专栏

初学File类

对File类的基本方法的理解 今天刚开始学了File类 一开始看思想编程看得迷迷糊糊的,之后受不了了,直接去看API文档 归纳: File->jav...

19410

扫码关注云+社区