Path类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace _10Path类
{
class Program
{
static void Main(string[] args)
{
//使用Path静态类,首先要添加命名空间,然后使用类名.方法名去调用
string path = @"F:\Android\android-sdk\build-tools\30.0.2\凤凰传奇.txt"; //在使用路径时,要使用@,取消转义字符在此处的作用
//获得文件名以及扩展名
Console.WriteLine(Path.GetFileName(path));
//获得文件名但是不包括扩展名
Console.WriteLine(Path.GetFileNameWithoutExtension(path));
//获得文件的扩展名
Console.WriteLine(Path.GetExtension(path));
//返回指定路径字符串的目录信息
Console.WriteLine(Path.GetDirectoryName(path));
//获得文件坐在的全路径
Console.WriteLine(Path.GetFullPath(path));
//将两个字符串组合成一个路径
Console.WriteLine(Path.Combine(@"C:\a\","b.txt"));
}
}
}
File类
using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _11File类
{
class Program
{
static void Main(string[] args)
{
/*1、创建、删除、复制、剪切文件,读写文件数据
2、绝对路径、相对路径
绝对路径:通过给定的这个路径直接能在计算机中找到这个文件。
相对路径:文件相对于应用程序的路径。
结论:
我们在开发中应该尽量使用相对路径,因为不是每个用户的绝对路径都是一样的。
*/
//创建一个文件
//File.Create(@"C:\Users\15783\Desktop\测试.txt");
//Console.WriteLine("创建成功");
//删除一个文件
//File.Delete(@"C:\Users\15783\Desktop\测试.txt");
//Console.WriteLine("删除成功");
//复制一个文件
//File.Copy(@"C:\Users\15783\Desktop\1.txt", @"C:\Users\15783\Desktop\new.txt"); //不允许覆盖同名的文件
//剪切一个文件---------将指定文件移到新位置,提供指定新文件名
//File.Move(@"C:\Users\15783\Desktop\new.txt", @"C:\Users\15783\Desktop\测试.txt");
//读写数据:打开一个二进制文件,将文件的内容读入一个字节数组,然后关闭该文件---读取到字节数组
//byte[] readData = File.ReadAllBytes(@"C:\Users\15783\Desktop\1.txt");
将字节数组转换为字符串-------------如果对字节数组使用ToString()方法,我们拿到的是这个数组的命名空间,所以应该使用解码方法
///将字节数组中的每一个元素都要按照我们指定的编码格式解码成字符串
string data = Encoding.Default.GetString(readData); //将指定字节数组中的所有字节解码为一个字符串------默认编码
//string data = Encoding.UTF8.GetString(readData); //可以点击文件另存为,在下面查看该文件的编码格式
//Console.WriteLine(data);
//UTF32、UTF8、UTF7--------Unicode UTF-8 GBK ASKII
//写数据:以字节数组的形式写入
//string input = "今天天气好晴朗,处处好风光";
将字符串转为字节数组
//byte[] data= Encoding.Default.GetBytes(input); //将指定字符串中的所有字符编码为一个字节数组
//File.WriteAllBytes(@"C:\Users\15783\Desktop\测试.txt", data); //创建一个新文件,在其中写入指定的字节数组;如果目标文件已存在,则覆盖该文件
//Console.WriteLine("数据写入成功");
//使用指定的编码读取文件的所有行,并将读取到的数据存储到string数组
//string[] contents= File.ReadAllLines(@"C:\Users\15783\Desktop\1.txt", Encoding.UTF8); //使用指定的编码读取文件的所有行,并将读取到的数据存储到string数组
//foreach (string item in contents)
//{
// Console.WriteLine(item);
//}
//使用指定的编码读取文件中的所有文本,并返回一个字符串
//string data = File.ReadAllText("测试.txt", Encoding.UTF8); //该处使用的是相对路径,需要把该文件与应用程序文件放在一块
//Console.WriteLine(data);
//创建一个新文件,按行写入数据
//File.WriteAllLines(@"C:\Users\15783\Desktop\new.txt", new string[] { "张三", "李四", "王五" });
//Console.WriteLine("数据写入成功");
//向文件中写入指定的字符串
//File.WriteAllText(@"C:\Users\15783\Desktop\new.txt", "今天是个好天气");
//向指定的文件中追加指定的字符串
//File.AppendAllText(@"C:\Users\15783\Desktop\new.txt", "看我有没有把你覆盖掉");
}
}
}
FileStream文件流读写数据
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _16文件流
{
class Program
{
static void Main(string[] args)
{
/* 将创建文件流对象的过程写在using当中,会自动的帮助我们释放掉流所占用的资源。 */
//使用FileStream来读取数据
using (FileStream fsRead = new FileStream(@"C:\Users\15783\Desktop\1.txt", FileMode.OpenOrCreate, FileAccess.Read))
{
byte[] buffer = new byte[1024 * 1024 * 3]; //3M大小
//返回本次实际读取到的有效字节数
int r = fsRead.Read(buffer, 0, buffer.Length);
//将字节数组中的每一个元素按照给定的编码格式解码成字符串
string data= Encoding.UTF8.GetString(buffer, 0, r);
Console.WriteLine(data); //如果出现乱码,则可能是数据的读与写编码格式不一致
}
使用FileStream来写入数据 使用using,可以避免关闭流与释放流所带来的麻烦,不需要进行关闭流与释放流
//using (FileStream fsWrite = new FileStream(@"C:\Users\15783\Desktop\测试.txt", FileMode.OpenOrCreate, FileAccess.Write))
//{
// string str = "今天是个好天气,处处好风光";
// byte[] data = Encoding.UTF8.GetBytes(str); //将字符串编码为一个字节数组,这个字节数组有多大,就可以最多写入多少字节
// fsWrite.Write(data, 0, data.Length);
//}
//Console.WriteLine("写入成功");
}
}
}
使用文件流来实现多媒体文件的复制
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _16使用文件流来实现多媒体文件的复制
{
class Program
{
static void Main(string[] args)
{
string source = @"C:\Users\15783\Desktop\海绵宝宝.mp4";
string target = @"C:\Users\15783\Desktop\测试.mp4";
CopyFile(source, target);
Console.WriteLine("文件复制成功");
}
/// <summary>
/// 将一个文件复制到另一个指定的目录下
/// </summary>
/// <param name="source">原路径</param>
/// <param name="target">目标路径</param>
public static void CopyFile(string source,string target)
{
//创建一个负责读取的流
using (FileStream fsRead=new FileStream(source,FileMode.Open,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); //实际读取到的字节数
//如果返回0,则什么也没读取到,读取完了
if (r == 0)
{
break;
}
fsWrite.Write(buffer, 0, r);
}
}
}
}
}
}
StreamReader和StreamWriter读写数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace _17StreamReader和StreamWriter读写文本数据
{
class Program
{
static void Main(string[] args)
{
使用StreamReader来读取一个文本文件
using (StreamReader sr = new StreamReader(@"C:\Users\15783\Desktop\1.txt", Encoding.UTF8))
{
//判断当前文件流位置是否在流结尾,使用循环不断进行读取数据
while (!sr.EndOfStream)
{
Console.WriteLine(sr.ReadLine()); //从当前流中读取一行字符并将数据作为字符串返回
}
}
//使用StreamWriter来写入一个文本文件
using (StreamWriter sw=new StreamWriter(@"C:\Users\15783\Desktop\newnew.txt",true)) //append为true,则不覆盖原文件的数据,继续追加数据
{
sw.Write("看我有没有把你覆盖掉");
}
Console.WriteLine("OK");
}
}
}