操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) 转

来源:互联网 发布:学编程用不用面面俱到 编辑:程序博客网 时间:2024/06/08 14:44

对于文件夹,文档的操作一直处于一知半解状态,有时间闲下来了,好好练习了一把,对文档,文件的操作有了一个基本的认知,

若要深入了解,还是得通过实际的项目才行了,好了废话不多说,上酸菜!!

注:红色标题为园友@李大菜鸟与@flyher补充的方法再次感谢

一 基本介绍

操作文档,文件夹,需要用到的类1 Directory(静态类) :     用于创建、移动和删除等操作通过目录和子目录   DirectoryInfo(非静态):2 File(静态类)  :提供用于创建、复制、删除、移动和打开文件的静态类,并协助创建 FileStream 对象       FileInfo(非静态)3 StreamReader:实现一个 TextReader,使其以一种特定的编码从字节流中读取字符 StreamWriter:实现一个 TextWriter,使其以一种特定的编码向流中写入字符

二 文件夹操作

  操作文件夹用Directory 或者 DirectoryInfo

  2.1 创建文件夹

复制代码
1 string path = @”F:\TestFile”;
2 //创建文件夹
3 public void CreatFolder(string path)
4 {
5 if (Directory.Exists(path))
6 {
7 Directory.Delete(path);
8 }
9 Directory.CreateDirectory(path);
10
11 }
复制代码
2.2 删除文件夹

复制代码
1 string path = @”F:\TestFile”;
2
3 //删除文件夹
4 public void DeleteFolder(string path)
5 {
6 //先删除文件夹中所有文件
7 DirectoryInfo directoryInfo = new DirectoryInfo(path);
8 foreach (var directory in directoryInfo.GetFiles())
9 {
10 File.Delete(directory.FullName);
11 }
12 //文件夹必须为空
13 if (Directory.Exists(path))
14 {
15 Directory.Delete(path);
16 }
17 }
复制代码
2.3 移动文件夹

复制代码
string path = @”F:\TestFile”;
string newPath = @”F:\NewFile”;
//移动文件夹
public void MoveFolder(string path, string newPath)
{
if (Directory.Exists(path))
{
//移动包括文件夹在内的所有文件
Directory.Move(path,newPath);
}
}
复制代码
2.4 获取文件夹下所有文件名

复制代码
string path = @”F:\TestFile”;

    //获取文件夹下所有文件名    public void GetFolderAllFiles(string path)    {        DirectoryInfo directory = new DirectoryInfo(path);        var files = directory.GetFiles();        foreach (var file in files)        {            Console.WriteLine(file.Name);            Console.WriteLine(file.FullName);//带文件路径全名        }    }

复制代码
2.5 文件夹重命名

  其实与移动文件夹方法是一样的,.net并没有提供重命名的方法,而是用新路径替换原路径以达到重命名的交果

复制代码
string name = @”F:\TestFile”;
string newName = @”F:\NewFile”;
//文件夹重命名
public void Rename(string name ,string newName)
{
if (Directory.Exists(name))
{
File.Move(name,newName);
}
}
复制代码
2.6 获取文件夹下所有文件夹名

复制代码
string path = @”F:\TestFile”;
//获取路径下所有文件夹
public void GetAllFolder(string path)
{
DirectoryInfo directory = new DirectoryInfo(path);
DirectoryInfo[] allFolder = directory.GetDirectories();//返回当前目录的子目录(文件夹)
foreach (var folder in allFolder)
{
Console.WriteLine(folder.Name);
Console.WriteLine(folder.FullName);//带全路径的名称
//还可以再遍历子文件夹里的文件,或文件夹(最好用递归的方式)
folder.GetDirectories();
}
}
复制代码
2.7 处理路径得到文件名和文件后缀

复制代码
string path = @”F:\TestFile”;
//处理路径得到文件名和文件后缀,
public void FormatFile(string path)
{
DirectoryInfo directory = new DirectoryInfo(path);
FileInfo[] files = directory.GetFiles();
foreach (var file in files)
{
string name = Path.GetFileNameWithoutExtension(file.Name);//取文件名
string extension = Path.GetExtension(file.Name);//取后缀名
Console.WriteLine(“文件名:{0} 后缀名:{1}”,name,extension);
}
}
复制代码
2.8 判断路径是文件或者文件夹(无效路径返回0)

复制代码
string path = @”F:\TestFile”;
//判断路径是文件或者文件夹(无效路径返回0)
public void IsFileOrFolder(string path)
{
DirectoryInfo directory = new DirectoryInfo(path);
if (directory.Exists)//指定的目录是否存在
Console.WriteLine(“Folder”);
else if (File.Exists(path))//指定的文件是否存在
Console.WriteLine(“File”);
else
Console.WriteLine(“0”);
}
复制代码

三 文档操作(txt)

  需要以下几个类:Directory 或者DirectoryInfo ,File 或者 FileInfo

3.1 创建文档

复制代码
string path = @”F:\TestFile\test.txt”;
//创建文档
public void CreateFile(string path)
{
//文件路径用Directory判断是否存在
if (Directory.Exists(path))
{
//先删除存在的文件
if (File.Exists(path))
{
File.Delete(path);
}
File.Create(path);
}
}
复制代码
3.2 复制文档

复制代码
string path = @”E:\TestFile\test.txt”;
string newPath = @”E:\Test2File\newTest.txt”;
//复制文档
public void CopyFile(string sourcePath, string destPath)
{
//只能针对同一卷轴(盘)下的文件
//destPath 为要复制的新地址,(destPath指定的文件名必须是未创建的,执行Copy方法时才会创建该文件)
if (File.Exists(sourcePath))
{
File.Copy(sourcePath, destPath);
}
}
复制代码
3.3 移动文档

复制代码
string path = @”E:\TestFile\test.txt”;
string newPath = @”E:\Test2File\newTest.txt”;
//移动文档
public void MoveFile(string SourcePath, string destPath)
{
//只能针对同一卷轴(盘)下的文件
//destPath 为要移动的新地址(destPath指定的文件名必须是未创建的,执行Move方法时会将Source文件移动到新地址可以重新命名)
if (File.Exists(SourcePath))
{
File.Move(SourcePath, destPath);
}
}
复制代码
3.4 删除文档

复制代码
string path = @”E:\TestFile\test.txt”;
//删除文档
public void DeleteFile(string path)
{
if (File.Exists(path))
{
File.Delete(path);
}
}
复制代码
四 文档读写操作(文档流操作) 对 第三点 的扩充

 需要以下类:FileStream 此类继承了Stream 类并重写了大部分方法,并提供多个带参构造函数,注意:要读取的目标流不是保持恒定的,而是每读一次就会相应的减少,在练习时

没注意,纠结了很久

4.1 写入字符

复制代码
string path = @”E:\TestFile\test.txt”;
//往以有文档中写入字符
public void CreateText(string path)
{
StreamWriter writer=File.CreateText(path);
//直接写入字符的write方法,每次写入都会覆盖之前的内容
writer.Write(“你好!”);
//把缓存流的数据写入到基础流
writer.Flush();
//关闭StreamWriter对象及基础流
writer.Close();
}
复制代码
4.2 以流的形式写入文档

复制代码
//将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中
public void ReadAndWriteFile()
{
string readPath = @”E:\TestFile\ReadStream.txt”;
string writePath = @”E:\TestFile\WriteStream.txt”;

        //Read        //打开现有文件以进行读取        FileStream rs = File.OpenRead(readPath);        byte[] buffer = new byte[rs.Length];        rs.Read(buffer, 0, buffer.Length);  //将文件内容读到字节流中        rs.Close();        //Write        //打开现有文件以进行写入        FileStream stream = File.OpenWrite(writePath);        stream.Write(buffer, 0, buffer.Length);        stream.Flush();        stream.Close();    }

复制代码
4.3 以流的形式追加到文档

复制代码
//将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中(追加内容)
public void ReadAndWriteNewFile()
{
string readPath = @”E:\TestFile\ReadStream.txt”;
string writePath = @”E:\TestFile\WriteStream.txt”;
//Read
FileStream rd = File.Open(readPath,FileMode.Open);
byte[] buffer = new byte[rd.Length];
rd.Read(buffer, 0, buffer.Length);
rd.Close();

        //Write        FileStream wt = File.Open(writePath,FileMode.Append);//设为追加到原文件中        wt.Write(buffer,0,buffer.Length);        wt.Flush();        wt.Close();    }

复制代码
4.4 读取目标文档指定的一行数据

复制代码
string paths = @”F:\TestFile\ReadStream.txt”;
int readNum = 3;
//读取目标文本指定的某一行数据
public void ReadoneLine(string path,int readNum)
{
//可以循环读每一行,然后到Add到集合中,再到集合中做处理
StreamReader reader = new StreamReader(path,Encoding.Default);
var streamList = new List();
int count=0;
string lineText = string.Empty;

        while ((lineText = reader.ReadLine()) != null)//对于流的读取每ReadLine一次流中就少一行,所直接在While用读到的流做判断,避免二次读        {            streamList.Add(lineText);        }        foreach (var item in streamList)        {            if (count == readNum - 1)            {                Console.WriteLine(item);            }            count++;        }    }

复制代码

五 读写流操作文档

需要以下几个类:StreamReader StreamWriter

5.1 字符串读取写操作

复制代码
//读取文档并写入到另一文档中(用字符串写入的方法)
public void ReadFile()
{
string readPath = @”E:\TestFile\ReadStream.txt”;
string writePath = @”E:\TestFile\WriteStream.txt”;

       using (StreamReader reader = new StreamReader(readPath,Encoding.Default)) //用默认的编码格式(必须要转格式否则乱码)       {           var rd = reader.ReadToEnd();           StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);//需要转成UTF-8的格式(可转可不转格式)           writer.Write(rd);           writer.Flush();           writer.Close();       }    }

复制代码
5.2 字符流读写操作

复制代码
//用字符流的方式读写文档
public void ReadWriteByByte()
{

        string readPath = @"F:\TestFile\ReadStream.txt";        string writePath = @"F:\TestFile\WriteStream.txt";        using (StreamReader reader = new StreamReader(readPath,Encoding.Default))//需要指定编码,否则读到的为乱码        {            #region 错误方法            //Read  注意:文本中的字符只能被读取一次,第二次时读取不到了            //var readStr =reader.ReadToEnd();//第一次读取            //char[] buffer = new char[readStr.Length];            //reader.Read(buffer, 0, buffer.Length);//第二次读取时,读不到值            #endregion            //Read             char[] buffer = new char[10000];            reader.Read(buffer, 0, buffer.Length);            //Write            StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);            writer.Write(buffer, 0, buffer.Length);            writer.Flush();            writer.Close();        }

复制代码

六 总结

   本文只对以上几个类常用的方法简单的介绍了,也是扫了下自己的盲区,如有更好的建议或方法,请指出。

另外如果觉得本文对你有一点小小的帮助不妨点下推荐,您的推荐是我写作的动力!!

阅读全文
0 0
原创粉丝点击