通过一个具体的案例来深入了解文件操作和文件夹操作:
文件操作管理类:
功能:
- 创建文件:
输入exit返回上一级,输入指定路径,创建新文件,路径存在就选择是否覆盖或者重新输入; - 删除文件:
输入exit返回上一级,输入指定路径,判断该路径是否存在,存在就删除该文件,不存在就重新输入; 查看文件:
1)查看文件信息:名字,创建时间,最后修改时间,字节大小
2)查看文件内容(doc,txt都可以查看,其他类型不可以);修改文件:
1)修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”;
2)修改文件的名字
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
namespace _文件操作
{
class FileTest
{
static void Main1()
{
FileManage file = new FileManage();
while (true)
{
Console.WriteLine("\t文件操作管理");
Console.WriteLine("1、创建文件\t2、删除文件");
Console.WriteLine("3、查看文件\t4、修改文件");
Console.WriteLine("输入操作序号:");
switch (Console.ReadLine())
{
case "1":
file.CreatFile();
break;
case "2":
file.DeleteFile();
break;
case "3":
file.ReadFile();
break;
case "4":
file.UpdateFile();
break;
default:
break;
}
}
}
}
///<summary>
///文件管理类
///</summary>
class FileManage
{
/// <summary>
/// 创建文件
/// 输入exit返回上一级,输入指定路径,创建新文件,路径存在就选择是否覆盖或者重新输入;
/// 测试路径:C:\Users\ZPC\Desktop\Hello.txt
/// </summary>
public void CreatFile()
{
while (true)
{
string path = InputJudge();
if (path.Equals("exit")) break;
if (File.Exists(path))
{
Console.WriteLine("路径存在,1、覆盖,2、重新输入");
string str = Console.ReadLine();
if (str.Equals("1"))
{
File.Create(path).Close();
Console.WriteLine("文件创建成功");
break;
}
else
continue;
}
else
{
try
{
File.Create(path).Close();
Console.WriteLine("文件创建成功");
break;
}
catch (Exception)
{
Console.WriteLine("路径有误");
}
}
}
}
/// <summary>
/// 删除文件
/// 输入exit返回上一级,输入指定路径,判断该路径是否存在,存在就删除该文件,不存在就重新输入;
/// </summary>
public void DeleteFile()
{
while (true)
{
string path = InputJudge();
if (path.Equals("exit")) return;
if (File.Exists(path))
{
Console.WriteLine("文件存在,1、删除 2、重新输入");
string str = Console.ReadLine();
if (str.Equals("1"))
{
File.Delete(path);
Console.WriteLine("文件删除成功");
return;
}
}
else
{
Console.WriteLine("文件不存在");
}
}
}
/// <summary>
/// 查看文件
/// 1)查看文件信息:名字,创建时间,最后修改时间,字节大小
/// 2)查看文件内容(doc,txt都可以查看,其他类型不可以);
/// </summary>
public void ReadFile()
{
while (true)
{
string path = InputJudge();
if (path.Equals("exit")) break;
if (File.Exists(path))
{
Console.WriteLine("查看文件");
Console.WriteLine("1、查看文件信息 2、查看文件内容");
switch (Console.ReadLine())
{
case "1":
ReadFileInfo(path);
break;
case "2":
ReadFileContent(path);
break;
default:
break;
}
}
else
{
Console.WriteLine("文件不存在");
}
}
}
/// <summary>
/// 查看文件信息
/// 名字,创建时间,最后修改时间,字节大小
/// </summary>
/// <param name="path">文件路径</param>
private void ReadFileInfo(string path)
{
FileInfo fileInfo = new FileInfo(path);
Console.WriteLine("名字:"+fileInfo.Name);
Console.WriteLine("创建时间:"+ fileInfo.CreationTime);
Console.WriteLine("最后修改时间:"+ fileInfo.LastWriteTime);
Console.WriteLine("字节大小:"+fileInfo.Length);
}
/// <summary>
/// 查看文件内容
/// doc,txt都可以查看,其他类型不可以
/// </summary>
/// <param name="path">文件路径</param>
private void ReadFileContent(string path)
{
byte[] bt = File.ReadAllBytes(path);
//将文件中的内容读取到字节数组中
string value = Encoding.Default.GetString(bt);
Console.WriteLine(value);
}
/// <summary>
/// 修改文件
/// 1)修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”;
/// 2)修改文件的名字
/// </summary>
public void UpdateFile()
{
while (true)
{
string path = InputJudge();
if (path.Equals("exit")) break;
if (File.Exists(path))
{
Console.WriteLine("修改文件");
Console.WriteLine("1、修改文件某个内容 2、修改文件的名字");
switch (Console.ReadLine())
{
case "1":
UpdateFileContent(path);
break;
case "2":
UpdateFileName(path);
break;
case "3":
AddToContent(path);
break;
default:
break;
}
}
else
Console.WriteLine("文件不存在");
}
}
/// <summary>
/// 以追加的方式添加内容
/// </summary>
/// <param name="path"></param>
private void AddToContent(string path)
{
//FileStream addContent = new FileStream(path,FileMode.Append);
Console.WriteLine("此功能暂未实现");
}
/// <summary>
/// 修改文件名字
/// </summary>
/// <param name="path"></param>
private void UpdateFileName(string path)
{
//实例化文件对象
FileInfo fileInfo = new FileInfo(path);
//根据路径拆分出路径前缀
int index = path.LastIndexOf(@"\");
string name = "";
for (int i = 0; i <= index; i++)
{
name += path[i];
}
Console.WriteLine(name);
while (true)
{
Console.WriteLine("请输入修改的名字:");
//将路径前缀拼接到文件名上
string upName = name + Console.ReadLine();
Console.WriteLine(upName);
try
{
File.Move(path, upName);
}
catch (Exception)
{
Console.WriteLine("文件名输入错误");
}
break;
}
}
/// <summary>
/// 修改文件中的某个内容(doc,txt):例如把里面所有的“1”改成“2”
/// </summary>
/// <param name="path"></param>
private void UpdateFileContent(string path)
{
//将文件中的内容转化成字符串
byte[] bt = File.ReadAllBytes(path);
string value = Encoding.Default.GetString(bt);
Console.WriteLine("文件内容:"+value.Length);
Console.WriteLine(value);
//使用字符串进行内容替换
while (true)
{
Console.WriteLine("输入要替换的内容:");
string upStr = Console.ReadLine(); //要修改的内容
//判断该内容是否存在
if (value.Contains(upStr))
{
Console.WriteLine("输入替换的内容:");
string reStr = Console.ReadLine(); //替换的内容
//将内容替换成输入的内容并返回新的字符串
string newValue = value.Replace(upStr, reStr);
byte[] newBt = Encoding.Default.GetBytes(newValue);
Console.WriteLine(newValue);
//将字节数组写入文件
File.WriteAllBytes(path,newBt);
break;
}
}
}
/// <summary>
/// 判断输入的字符串是否符合路径规则
/// </summary>
/// <returns></returns>
public string InputJudge()
{
string path = "";
while (true)
{
Console.WriteLine("请输入文件路径(exit返回上一级):");
path = Console.ReadLine();
//"([^<>/\\\\|:\"\"\\*\\?]+)\\.\\w+$+"
//([^<>/\\\|:""\*\?]+\.\w+$)
//([^<>/\\\|:""\*\?]+)\.\w+$
//[^/\\\\<>*?|\"]+\\.[^/\\\\<>*?|\"]+
//@"^[^\\/:\*\?""<>|]{1,120}$"
//@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]*$"
Regex regex = new Regex(@"^([a-zA-Z]:\\)?[^\`\~\!\@\#\$\%\^\&\-\+\/\:\*\?\""\<\>\|\,\;\{\}\[\]\(\)]*$");
if (path.Equals("exit")) break;
int index = path.LastIndexOf(".");
if (index > 0)
{
if (!regex.IsMatch(path))
{
Console.WriteLine("文件名包含不合法字符");
continue;
}
string newPath = path.Substring(index);
if (newPath.Equals(".txt") || newPath.Equals(".doc"))
{
break;
}
}
else
{
Console.WriteLine("请加上文件扩展名(.txt或者.doc)");
}
}
return path;
}
}
}