zoukankan      html  css  js  c++  java
  • 步步为营-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 运行结果


               

  • 相关阅读:
    C#中实现简单的预警提示功能(语音提示与弹窗提示)
    C#中使用SoundPlayer播放音频文件(wav文件)
    Angular中路由的嵌套-父子路由
    Winform中设置ZedGraph的坐标轴的标题和刻度不显示十次幂
    Angular中使用JS实现路由跳转、动态路由传值、get方式传值
    surprise库官方文档分析(二):使用预测算法
    surprise库官方文档分析(一)
    webpack官方文档分析(三):Entry Points详解
    webpack官方文档分析(二):概念
    webpack官方文档分析(一):安装
  • 原文地址:https://www.cnblogs.com/YK2012/p/6694729.html
Copyright © 2011-2022 走看看