第一步   写一个文件父类:

public class BaseFile
    {
        public string FilePath { get; set; }

private string _fileName;

public string FileName
        {
            get { return _fileName; }
            set { _fileName = value; }
        }
        public BaseFile() 
        {
        
        }
        public BaseFile(string filePath,string fileName)
        {
            this.FilePath = filePath;
            this.FileName = fileName;
        }

/// <summary>
        /// 设计一个函数用来打开指定的函数
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="fileName"></param>
        public void OpenFile(string filePath, string fileName) 
        {
            ProcessStartInfo psi = new ProcessStartInfo(filePath+"//"+fileName);

Process pro = new Process();

pro.StartInfo = psi;

pro.Start();
        }
    }

第二步   分别新建一个TXT,PDF,XLS文件子类继承文件父类:

TXT:

public class TextFile : BaseFile
    {
        public TextFile(string filePath, string fileName)
            : base(filePath,fileName)
        {

}
    }

PDF:

public class PdfFile : BaseFile
    {
        public PdfFile(string filePath, string fileName)
            : base(filePath, fileName)
        {

}
    }

XLS:

public class XlsFile : BaseFile
    {
        public XlsFile(string filePath, string fileName)
            : base(filePath, fileName)
        {

}
    }

第三步 通过简单工厂模式返回设计父类:

public class Common
    {
        public static BaseFile GetFile(string filePath,string fileName) 
        {
            string strExtension = Path.GetExtension(fileName);

BaseFile bf = null;

switch (strExtension)
            {
                case ".txt":
                    bf = new TextFile(filePath, fileName);
                    break;
                case ".pdf":
                    bf = new PdfFile(filePath, fileName);
                    break;
                case ".xls":
                    bf = new XlsFile(filePath, fileName);
                    break;
            }

return bf;
        }
    }

第四步   从控制台操作要打开的文件:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入你要打开文件的路径:");
            string filePath = Console.ReadLine();
            Console.WriteLine("请输入你要开文件的名字:");
            string fileName = Console.ReadLine();

//通过简单工厂模式返回设计父类
            BaseFile bf = Common.GetFile(filePath, fileName);

if (bf!=null)
            {
                bf.OpenFile(filePath, fileName);
            }

Console.ReadKey();
        }
    }

进程系列(三)-进程的基本用法(打开文件示列)相关推荐

  1. linux进程系列(5)进程链与进程扇

    在linux编程中我们或许需要创建多个进程才可以完成任务需求,那么我们怎么创建多个进程呢?下面我们介绍一下进程链与进程扇的概念 所谓进程链就是父进程创建一个子进程,创建的子进程再次创建出属于自己的子进 ...

  2. Linux三种修改打开文件数量限制的方法

    系统环境 Centos7 为什么要限制打开文件的数量? 因为操作系统需要内存来管理每个文件,所以可以打开的文件数可能会受到限制.由于程序也可以关闭文件处理程序,它可以创建任意大小的文件,直到所有可用磁 ...

  3. linux hosts文件如何修改_3 种方法教你在 Linux 中修改打开文件数量限制

    当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字.主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件. Linux上的进程受到许多限制,这些限制也阻碍它们正确 ...

  4. [系统安全] 三十五.Procmon工具基本用法及文件进程、注册表查看

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. Android 系统(243)---Android进程系列第一篇---进程基础

    Android进程系列第一篇---进程基础 内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等.仅供参考,欢迎指正. 一.从Linu ...

  6. python在主线程上下文执行_线程进程系列*(Python)

    一 ,线程的两种调用方式 threading 模块建立在thread 模块之上.thread模块以低级.原始的方式来处理和控制线程,而threading 模块通过对thread进行二次封装, 提供了更 ...

  7. Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程

    配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask 说明 系统:Android10.0 设备: FireFly RK3399 (ROC-RK3399-PC-PLUS) 前言 上一节 ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

    文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...

  9. 进程隐藏与进程保护(SSDT Hook 实现)(三)

    文章目录: 1. 引子: 2. 获取当前系统下所有进程: 3. 服务管理(安装,启动,停止,卸载): 4. 应用程序和内核程序通信: 5. 小结: 1. 引子: 关于这个 SSDT Hook 实现进程 ...

  10. Android系统启动系列----init进程

    Android系统启动系列 Android系统启动系列----init进程 Android系统启动系列----Zygote进程 引言 在开发app的过程中,是不是会有疑问: java程序的运行不是从m ...

最新文章

  1. PonyAI小马智行官宣再获2.67亿美元融资,创办4年累计吸金超10亿美元
  2. Linux开发中 MD5值的计算
  3. linux各种压缩包使用方法
  4. 干货:嵌入式C语言源代码优化方案(非编译器优化)
  5. java web项目请求控制及简单漏洞防范
  6. 疯狂连连看之开发游戏界面组件一
  7. 不推荐使用getResources()。getColor()[重复]
  8. Mysql 行锁入门
  9. 为SQL Server 增加链接到SQL Server 的链接服务器
  10. Neural Style Transfer
  11. 如何将php网页打印成pdf,新技能!如何把网页打印成pdf文件?
  12. FPGA课程:JESD204B的应用场景(干货分享)
  13. 1952-2018年中国各省份人均GDP(消涨处理)
  14. 自行车、电动自行车、儿童自行车做16 CFR 1512测试报告
  15. OSChina 周五乱弹 ——电影里有在线/离线,递归,循环,矩阵等概念?
  16. switch结构详解
  17. Campus Talking 小记(3)
  18. EffectiveJava阅读感想一
  19. 设计模式六大原则及常用模式详解
  20. DBeaver SQL format 第三方插件方案

热门文章

  1. python三行代码抠图_Python用5行代码如何实现批量抠图 Python用5行代码实现批量抠图方法...
  2. ## Android Studio 开发(四)--蓝牙通信
  3. 袁腾飞讲述西方古代哲学思想
  4. c#_Form调用另一个Form中的按钮和方法
  5. mui用ajax上拉加载更多,mui 中的一个上拉加载及下拉刷新的方法 ,但是我使用ajax拿不到url中的数据,是为什么?...
  6. MMORPG开发入门
  7. ISP(八) Gamma原理详解
  8. 联想一体机用u盘装linux教程,联想一体机如何用u盘装系统
  9. [FSOD][笔记]Context-Transformer: Tackling Object Confusion for Few-Shot Detection(AAAI 2020)
  10. 三轮全向轮底盘SLAM挖坑系列-简介