步步为营-01-通过进程打开文件
知识点:1,简单工厂设计模式;2,进程使用
1.1 建立一个控制台测试程序
1.2 main方法中获得两个参数 文件路径(FilePath)和文件名(FileName)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
static void Main(string[] args) { Console.WriteLine("请输入文件路径"); string filePath = Console.ReadLine(); Console.WriteLine("请输入文件名称"); string fileName = Console.ReadLine(); //定义一个打开文件的方法 string fileInfo = GetFile(filePath, fileName); if (!String.IsNullOrEmpty(fileInfo)) { OpenFile(fileInfo); } }
1.3 还定义两个方法用于获取文件和打开文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//获取文件信息 public static string GetFile(string filePath, string fileName) { if (String.IsNullOrEmpty(filePath)||String.IsNullOrEmpty(filePath)) { Console.WriteLine("文件信息有误"); return string.Empty; } return filePath + "\\" + fileName; } private static void OpenFile(string fileInfo) { ProcessStartInfo psi = new ProcessStartInfo(fileInfo); Process pro = new Process(); pro.StartInfo = psi; pro.Start(); }
1.4 运行结果
基本功能到此已经实现.但是为了演示简单工厂模式和继承性,需要画蛇添足一下
2.1 添加基础类:定义一些基本的属性(FileName和FilePath)和基本方法(GetFile)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenFileByProcess { public class BaseFile { //构造函数 // public BaseFile() { } public BaseFile( string filePath,string fileName) { this.fileName = fileName; this.FilePath = filePath; } //类中包括fileName 和FilePath public string FilePath { get; set; } //prop+Tab+tab private string fileName;//Ctrl+r+e public string FileName { get { return fileName; } set { fileName = value; } } public void OpenFile() { //Sift+alt+F10 ProcessStartInfo psi = new ProcessStartInfo(this.FilePath + "\\" + this.fileName); Process pro = new Process(); pro.StartInfo = psi; try { pro.Start(); } catch (Exception) { Console.WriteLine("输入文件有误"); } } } }
2.2 创建子类实现基类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenFileByProcess { public class TxtFile:BaseFile { public TxtFile(string filePath, string fileName) : base(filePath, fileName) { } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenFileByProcess
{
public class AVIFile : BaseFile
{
public AVIFile(string filePath, string fileName) : base(filePath,fileName) { }
}
}
2.3 修改main方法,简单工厂
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OpenFileByProcess { class Program { static void Main(string[] args) { Console.WriteLine("是否开始,0-开始;1-退出"); string star = Console.ReadLine(); while (star=="0") { Console.WriteLine("请输入文件路径"); string filePath = Console.ReadLine(); Console.WriteLine("请输入文件名称"); string fileName = Console.ReadLine(); //定义一个打开文件的方法 BaseFile fileInfo = GetFile(filePath, fileName); if (fileInfo != null) { fileInfo.OpenFile(); } Console.WriteLine("是否开始,0-开始;1-退出"); star = Console.ReadLine(); } } //简单工厂 //通过返回类型为父类BaseFile public static BaseFile GetFile(string filePath, string fileName) { BaseFile bf = null; string strExtension = Path.GetExtension(fileName); switch (strExtension) { case ".txt": bf = new TxtFile(filePath, fileName); break; case ".avi": bf = new AVIFile(filePath, fileName); break; default: Console.WriteLine("输入的文件类型不存在"); break; } return bf; } } }
2.4 运行结果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步