步步为营-01-通过进程打开文件

知识点:1,简单工厂设计模式;2,进程使用

1.1 建立一个控制台测试程序

1.2 main方法中获得两个参数 文件路径(FilePath)和文件名(FileName)

  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);
           }
        }
View Code

1.3 还定义两个方法用于获取文件和打开文件

 //获取文件信息
        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();

        }
View Code

1.4 运行结果

 基本功能到此已经实现.但是为了演示简单工厂模式和继承性,需要画蛇添足一下

2.1 添加基础类:定义一些基本的属性(FileName和FilePath)和基本方法(GetFile)

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("输入文件有误");
            }
        }
    }
}
BaseFile

2.2 创建子类实现基类

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) { }

    }
}
TxtFile
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) { }
    }
}
AVIFile

 2.3 修改main方法,简单工厂

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;
        }

       
    }
}
Main

2.4 运行结果


           

原文地址:https://www.cnblogs.com/YK2012/p/6694729.html