C# 目录路径操作和读取文件详解

文章目录

  • C# 目录路径操作和读取文件详解
    • 1、Path 类 操作目录路径
    • 2. File 类使用
      • 2.1创建,删除,复制,剪切移动文件
      • 2.2 读取文件:ReadAllBytes,ReadAllLines,ReadAllText
      • 2.3 写文件:WriteAllBytes,WriteAllLines,WriteAllText,AppendAllText
    • 3. 文件流读取
      • 3.1 FileStream 读写
      • 3.2 StreamReader和StreamWriter

1、Path 类 操作目录路径

string str = @"C:\3000soft\Red Spider\Data\Message\老赵.wav";
//获得文件名
Console.WriteLine(Path.GetFileName(str));
//获得文件名但是不包含扩展名
Console.WriteLine(Path.GetFileNameWithoutExtension(str));
//获得文件的扩展名
Console.WriteLine(Path.GetExtension(str));
//获得文件所在的文件夹的名称
Console.WriteLine(Path.GetDirectoryName(str));
//获得文件所在的全路径
Console.WriteLine(Path.GetFullPath(str));
//连接两个字符串作为路径
Console.WriteLine(Path.Combine(@"c:\a\" , "b.txt"));

结果

老赵.wav //获得文件名
老赵 //获得文件名但是不包含扩展名
.wav //获得文件的扩展名
C:\3000soft\Red Spider\Data\Message //获得文件所在的文件夹的名称
C:\3000soft\Red Spider\Data\Message\老赵.wav //获得文件所在的全路径
c:\a\b.txt //连接两个字符串作为路径

绝对路径和相对路径
绝对路径:通过给定的这个路径直接能在我的电脑中找到这个文件。
相对路径:文件相对于应用程序的路径。
结论:
我们在开发中应该去尽量的使用相对路径。

注意

C#的相对路径是以exe文件为标准的,不是cs文件

比如@"new.txt",文件

2. File 类使用

编码格式:指的就是你以怎样的形式来存储字符串,数据
产生乱码的原因就是因为你保存这个文件的编码格式跟你打开这个文件的编码格式不一样。

File 类一般应用于小文件

2.1创建,删除,复制,剪切移动文件

//创建一个文件
File.Create(@"D:\new.txt");//删除一个文件
File.Delete(@"D:\new.txt");
//复制一个文件
File.Copy(@"D:\code.txt", @"D:\new.txt");//code.txt是源文件,new.txt是目标文件
//剪切移动,并且重命名
File.Move(@"C:\Users\SpringRain\Desktop\code.txt", @"C:\Users\SpringRain\Desktop\newnew.txt");

2.2 读取文件:ReadAllBytes,ReadAllLines,ReadAllText

【ReadAllBytes,按字节读取】

byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\抽象类特点.txt");
//将字节数组中的每一个元素都要按照我们指定的编码格式解码成字符串
//UTF-8  GB2312 GBK ASCII  Unicode//Default国内默认编码GBK
string s = Encoding.Default.GetString(buffer);

一般不推荐使用Default,很容易产生乱码。

使用其他编码的方法有:

//a,这个方法编码不全
string s = Encoding.UTF8.GetString(buffer);
//b 这个方法适用于全部编码
string s = Encoding.GetEncoding("GBK").GetString(buffer);

**【ReadAllLines】**这种方式比较常用

string[] contents = File.ReadAllLines(@"C:\Users\mgboy\Desktop\1.txt", Encoding.GetEncoding("UTF-8"));
// 遍历
foreach (string item in contents)
{Console.WriteLine(item);
}

ReadAllLines使用其他编码的方法

//a,推荐,因为适用全部编码
string[] contents = File.ReadAllLines(@"C:\1.txt", Encoding.GetEncoding("UTF-8"));
// b
UTF8Encoding utf8 = new UTF8Encoding();
string[] contents = File.ReadAllLines(path, utf8);
//c
string[] contents2 = File.ReadAllLines(path, Encoding.UTF8);

【ReadAllText】整个文件读取

string str = File.ReadAllText("抽象类特点.txt", Encoding.Default);

2.3 写文件:WriteAllBytes,WriteAllLines,WriteAllText,AppendAllText

【WriteAllBytes】

//没有这个文件的话 会给你创建一个 有的话 会给你覆盖掉
string str = "今天天气好晴朗处处好风光";
//需要将字符串转换成字节数组,注意使用的编码
byte[] buffer = Encoding.UTF8.GetBytes(str);
File.WriteAllBytes(@"new.txt", buffer);

【WriteAllLines,WriteAllText】

//WriteAllLines 每个字符串占一行
File.WriteAllLines(@"C:\Users\SpringRain\Desktop\new.txt", new string[] { "aoe", "ewu" });//WriteAllText
File.WriteAllText(@"C:\Users\SpringRain\Desktop\new.txt", "张三李四王五赵六");

【AppendAllText】追加文本内容

File.AppendAllText(@"C:\new.txt", "\n看我有木有把你覆盖掉");

3. 文件流读取

可以适用大文件

3.1 FileStream 读写

【读】

方式1

//使用FileStream来读取数据
//FileMode.OpenOrCreate文件模式是打开,如果没有就创建一个文件,这样如果没有文件就不会抛异常,FileAccess.Read是操作文件方式,为读取
FileStream fsRead = new FileStream(@"C:\new.txt", FileMode.OpenOrCreate, FileAccess.Read);
byte[] buffer = new byte[1024 * 1024 * 5];
//r是返回本次实际读取到的有效字节数。读取到buffer,如果文件大小不够buffer,会用空字符代替
int r = fsRead.Read(buffer, 0, buffer.Length);
//将字节数组中每一个元素按照指定的编码格式解码成字符串
string s = Encoding.UTF8.GetString(buffer, 0, r);
//关闭流
fsRead.Close();
//释放流所占用的资源
fsRead.Dispose();
Console.WriteLine(s);//这种方式一定要手动关闭文件

方式2

//这种方式可以自动关闭文件
using (FileStream fsRead = new FileStream(@"C:\new.txt", FileMode.OpenOrCreate, FileAccess.Read))
{byte[] buffer = new byte[1024 * 1024 * 5];
int r = fsRead.Read(buffer, 0, buffer.Length);
string s = Encoding.UTF8.GetString(buffer, 0, r);
Console.WriteLine(s);
}

【写】

//使用FileStream来写入数据,会覆盖之前内容,不是把之前内容删除
using (FileStream fsWrite = new FileStream(@"C:\Users\mgboy\Desktop\new.txt", FileMode.OpenOrCreate, FileAccess.Write))
{string str = "看我游牧又把你覆盖掉";byte[] buffer = Encoding.UTF8.GetBytes(str);fsWrite.Write(buffer, 0, buffer.Length);
}

【复制文件】

//思路:就是先将要复制的多媒体文件读取出来,然后再写入到你指定的位置
public static void CopyFile(string source, string target)
{//首先我们先创建一个读取文件的流using (FileStream fsRead = new FileStream(source, FileMode.OpenOrCreate, FileAccess.Read)) {using(FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)){byte[] buffer = new byte[1024 * 1024 * 5];while (true){int r = fsRead.Read(buffer, 0, buffer.Length);if (r == 0){break;}fsWrite.Write(buffer, 0, r);}}}
}

3.2 StreamReader和StreamWriter

StreamReader和StreamWriter是操作字符层面的

using (StreamReader sr = new StreamReader(@"C:\new.txt", Encoding.UTF8))
{// 如果不是文件结尾就继续按行读取文件while (!sr.EndOfStream){Console.WriteLine(sr.ReadLine());}
}//使用StreamWriter来写入一个文本文件
using (StreamWriter sw = new StreamWriter(@"C:\newnew.txt", true))//true是表示追加模式
{sw.Write("看我有木有把你覆盖掉");
}

C# 目录路径操作和读取文件详解相关推荐

  1. python3文件路径操作常用方法带示例详解(os.path模块,os.listdir,os.walk,os.scandir方法等)(不定期更新整理中)

    python文件路径操作常用方法 前言(文件路径的基本知识) 1.路径的获取和转换 获取当前.py脚本文件的路径 获取绝对路径 路径的规则化 2.路径的判断 判断路径是否存在 判断路径是否为文件 判断 ...

  2. vue-cli中config目录下的index.js文件详解

    // see http://vuejs-templates.github.io/webpack for documentation. // path是node.js的路径模块,用来处理路径统一的问题 ...

  3. python读取文件详解_python 文件读取方法详解

    #绝对路径# f =开放(' \/用户\/方\/下载\/我的古诗.文本的模式= ' r ',编码= ' utf - 8\u201D) =() # #内容打印(内容)#()#相对路径f =开放(\u20 ...

  4. linux /proc目录文件详解

    Linux中/proc目录下文件详解(一) /proc文件系统下的多种文件提供的系统信息不是针对某个特定进程的,而是能够在整个系统范围的上下文中使用.可以使用的文件随系统配置的变化而变化.命令proc ...

  5. Vue 脚手架搭建目录及文件详解

    vue脚手架搭建在各大前端网站都有详解,这里就不多作介绍,此文章主要介绍脚手架搭建后的目录结构,以及配置文件的详解. 1. 目录结构 目录结构如下: 我们来介绍一下这些目录: 一级目录 build: ...

  6. Linux中/proc目录下文件详解 /proc/devices文件 /proc/modules文件

    http://blog.chinaunix.net/uid-10449864-id-2956854.html 原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu,内存等相关的信息, ...

  7. apache-maven-xxx\conf目录下的settings文件详解

    apache-maven-xxx\conf目录下的settings文件详解 settings.xml的作用 它是用来设置Maven参数的配置文件.并且,settings.xml是Maven的全局配置文 ...

  8. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  9. matlab文件目录表示,Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格...

    Matlab - 文件目录路径操作_读取不同路径下的相同文件名表格 tr1   str1   for   max   imp   mda   eva   目录   xls clear;clc; clo ...

最新文章

  1. jenkins修改启动用户,解决执行脚本权限问题
  2. Android4.0 Design之UI设计易犯的错误2
  3. c语言用指针带出局部变量,关于C语言中返回局部变量和局部指针变量
  4. Vulkan Tutorial 14 Integration pipeline
  5. 加权最小二乘法的理解
  6. Asp.Net页面传值的方法简单总结【原创】
  7. C语言解析http请求表单内容
  8. 01-单一职责原则(SPR)
  9. java windows wrapper_Java Service Wrapper 发布windows后台程序的方法
  10. explain是mysql的关键字吗_Mysql Explain 关键字
  11. RQNOJ 95 多多看DVD(加强版):01背包
  12. u3d_shader_surface_shader_2
  13. 回文数 LeetCode
  14. 关于idea中运行maven项目报错显示找不到包或符号的问题——终极方案
  15. 销售额预测_机器学习
  16. 可口可乐市场调查失败的原因_经典案例可口可乐一次市场调研失败的教训
  17. azw3电子书如何用安卓手机打开?
  18. 一键生成表白页面,个人网站,在线制作生成网站php源码
  19. EasyMesh_Specification_v4中英文
  20. 家用计算机如何连无线网,电脑上怎么连接wifi_怎样连接自己家的wifi-win7之家

热门文章

  1. BlackBerry 9900通过 中国银行卡检测中心SWP-NFC通讯认证
  2. 计算机在线试卷及答案,计算机应用基础试卷及答案.pdf
  3. 03论文阅读与分享————2020年中国知网六自由度机器人轨迹规划相关论文统计
  4. 压抑的胜利--张曼菱
  5. AI人工智能Python实现简单人机对话:你好,人类!
  6. java分数变小数的函数_分数化小数
  7. 摇摇开门:管理,需要思维的大转变
  8. 阿里云oss简单的文件上传步骤
  9. 使用 echarts实现中国地图
  10. 40%的中小企业已倒闭,谁来救助剩下的60%?