前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#文件

C#文件

作者头像
拾点阳光
发布2018-05-10 18:08:04
1.1K0
发布2018-05-10 18:08:04
举报
文章被收录于专栏:码云1024

文件


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

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

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的文件。

代码语言:javascript
复制
FileStream NewText=File.Create(@"e1.txt");
NewText.Close();

文件打开方法:File.Open

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

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
File.Delete(@"e1.txt");

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

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

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

Path类


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

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

代码语言:javascript
复制
public static string ChangeExtension(string path,string extension)

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

代码语言:javascript
复制
string s =Path.ChangeExtension(@"course\demo.cs", "");//返回:"course\demo."

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

代码语言:javascript
复制
public static string Combine(string path1,string path2)

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

代码语言:javascript
复制
string path1 = @"course";
string path2 = @"install.txt";
string s4 = Path.Combine(path1, path2);
//返回:"course/install.txt"

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

代码语言:javascript
复制
public static string GetDirectoryName(string path)

如下代码实例:

代码语言:javascript
复制
string fileName = @"a.txt";
Path.GetDirectoryName(fileName);

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

代码语言:javascript
复制
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);

代码语言:javascript
复制
Directory.CreateDirectory(@"course\NewDirectoty");

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

代码语言:javascript
复制
Directory.Delete(@"course\NewDirectoty",true);

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

代码语言:javascript
复制
string [] Directorys;
Directorys = Directory. GetDirectories (@"course");

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

代码语言:javascript
复制
string [] Files;
Files = Directory.GetFiles (@"course");

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

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

文件的读写


FileStream类读写文件

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

代码语言:javascript
复制
/*----------读取文件-----------*/
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类提供了写入文件的方法。

代码语言:javascript
复制
/*----------读取文件-----------*/
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流对象一个字节。
代码语言:javascript
复制
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);
        }
    }
}    
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件
  • File类常用方法
  • Path类
  • Directory类
  • 文件的读写
  • 内存流
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档