File
File类是一个静态类,可直接调用其方法成员
Creat()、Exists()、Delete()
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/Test.txt";
File.Create(path).Close();
if (File.Exists(path))
{
File.Delete(path);
}
}
}
}
WriteAllLines()、ReadAllLines()、ReadAllText()、WriteAllText()
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/Test.txt";
File.WriteAllLines(path, new string[] { "111", "222" });
string text = File.ReadAllText(path);
Console.WriteLine(text);
File.WriteAllText(path, "333\r\n444");
string[] strs = File.ReadAllLines(path);
foreach (var item in strs)
{
Console.WriteLine(item);
}
}
}
}
将一张图片的1/4复制到另一张图片(效果:目标图片显示1/4)
ReadAllBytes()、WriteAllBytes
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/testPng.png";
byte[] data = File.ReadAllBytes(path);
byte[] dataWrite = new byte[data.Length / 4];
Array.Copy(data, 0, dataWrite, 0, data.Length / 4);
File.WriteAllBytes("C:/testPng.png", dataWrite);
File.Move(path, "C:/testPng2.png"); //移动
}
}
}
FileInfo
提供操作文件的属性和实例方法
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/test.txt";
FileInfo info = new FileInfo(path);
if (!info.Exists)
{
Console.WriteLine("创建");
info.Create();
info.Refresh();
Console.WriteLine("文件目录:" + info.DirectoryName);
Console.WriteLine("文件字节长度:" + info.Length);
Console.WriteLine("文件是否可读:" + info.IsReadOnly);
}
else
{
Console.WriteLine("删除");
info.Delete();
}
}
}
}
FileStream
文件流类FileStream公开了以文件为主的Stream,既支持同步读/写操作,也支持异步读/写操作,FileStream类的特点是操作字节和字节数组。这种方式不适合操作用字符数据构成的文本文件,适合处理非文本文件。FileStream类提供了对文件的低级而复杂的操作,因此能够实现更多高级的功能。
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/test.txt";
FileStream fileStreamWrite = new FileStream(path, FileMode.OpenOrCreate);
string value = "我是Test";
byte[] dataWrite = Encoding.UTF8.GetBytes(value);
fileStreamWrite.Write(dataWrite, 0, dataWrite.Length);
fileStreamWrite.Flush();
fileStreamWrite.Close();
fileStreamWrite = null;
FileStream fileStreamRead = new FileStream(path, FileMode.OpenOrCreate);
int length = (int)fileStreamRead.Length;
Console.WriteLine(length);
byte[] dataRead = new byte[length];
fileStreamRead.Read(dataRead, 0, length);
Console.WriteLine("读出的数据:" + Encoding.UTF8.GetString(dataRead));
fileStreamRead.Close();
fileStreamRead = null;
}
}
}
实例:控制台每输入一行就写到文件中,输入exit停止输入
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
static void Main(string[] args)
{
string path = "D:/test.txt";
FileStream fileStreamWrite = new FileStream(path, FileMode.OpenOrCreate);
while (true)
{
string str = Console.ReadLine();
if (str == "exit")
{
break;
}
byte[] dataWrite = Encoding.UTF8.GetBytes(str + "\r\n");
fileStreamWrite.Write(dataWrite, 0, dataWrite.Length);
fileStreamWrite.Flush();
}
fileStreamWrite.Close();
fileStreamWrite = null;
}
}
}
Directory和DirectoryInfo
打印一个路径下所有的子目录与子文件,并且每一个子级向后一个tab标志位,以此类推…
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
public static void Main()
{
PrintDirectory("D:/test", 0);
}
public static void PirntFile(string path, int level)
{
if (Directory.Exists(path))
{
string[] files = Directory.GetFiles(path);
foreach (string file in files)
{
for (int i = 1; i < level; i++)
{
Console.Write("\t");
}
Console.WriteLine(file);
}
}
}
public static void PrintDirectory(string path, int level)
{
if (Directory.Exists(path))
{
level++;
string[] zm = Directory.GetDirectories(path);
foreach (string mulu in zm)
{
for (int i = 1; i < level; i++)
{
Console.Write("\t");
}
Console.WriteLine(mulu);
PrintDirectory(mulu, level);
}
}
}
}
}
案例:将一个文件或者文件夹移动到一个新的目标路径
using System;
using System.IO;
using System.Text;
namespace cchoop
{
class Program
{
public static void Main()
{
while (true)
{
Console.WriteLine("===========================================");
Console.Write("请输入要移动的文件路径或目录的路径\n警告:请不要输入磁盘或重要的大型文件夹\n请输入:");
string sourceDirName = Console.ReadLine();
if (!IsExitsFileOrDirectory(sourceDirName))
{
Console.WriteLine("路径有误,不存在该路径的文件或者目录,请重新输入!");
continue;
}
Console.Write("请输入要新位置的路径\n请输入:");
string destDirName = Console.ReadLine();
if (destDirName.Contains(sourceDirName))
{
Console.WriteLine("非法操作:不可以将目标文件路径放入源文件子目录中");
continue;
}
//移动文件
bool result = Move(sourceDirName, destDirName);
if (result == false)
{
Console.WriteLine("移动失败");
continue;
}
Console.WriteLine("移动成功!");
//删除源文件
//如果是文件
if (File.Exists(sourceDirName))
{
File.Delete(sourceDirName);
}
if (Directory.Exists(sourceDirName))
{
//是目录
Directory.Delete(sourceDirName, true);
}
Console.WriteLine("是否继续移动文件?Y/N");
while (true)
{
string opStr = Console.ReadLine();
if (opStr == "Y" || opStr == "y")
{
break;
}
else if (opStr == "N" || opStr == "n")
{
return;
}
}
}
}
public static bool Move(string sourceDirName, string destDirName)
{
try
{
//如果是文件
if (File.Exists(sourceDirName))
{
File.Copy(sourceDirName, destDirName);
}
if (Directory.Exists(sourceDirName))
{
//是目录
Directory.CreateDirectory(destDirName);
MoveDirectory(sourceDirName, destDirName);
}
}
catch (ArgumentException)
{
Console.WriteLine("目标路径有误 !");
return false;
}
catch (IOException)
{
Console.WriteLine("目标文件已经存在!");
return false;
}
return true;
}
public static void MoveDirectory(string sourceDirName, string destDirName)
{
try
{
string[] dirs = Directory.GetDirectories(sourceDirName);
foreach (var dir in dirs)
{
string dirName = dir.Substring(dir.LastIndexOf('\\') + 1);
string newPath = destDirName + "\\" + dirName;
Directory.CreateDirectory(newPath);
MoveDirectory(dir, newPath);
}
string[] files = Directory.GetFiles(sourceDirName);
foreach (var file in files)
{
string fileName = file.Substring(file.LastIndexOf('\\') + 1);
File.Copy(file, destDirName + "\\" + fileName);
}
}
catch (Exception)
{
Console.WriteLine("异常!");
}
}
public static bool IsExitsFileOrDirectory(string path)
{
bool isExists = false;
if (File.Exists(path) || Directory.Exists(path))
{
isExists = true;
}
return isExists;
}
}
}