首页 > 编程语言 >C#文件路径操作

C#文件路径操作

时间:2022-10-28 11:14:54浏览次数:50  
标签:文件 路径 string C# xxx System 获取 exe

System.Environment.CurrentDirectory
System.IO.Directory.GetCurrentDirectory()
这两个方法获得的路径是一样的,获得的是当前路径,这个路径不一定是程序所在的路径。任何会改变当前路径的方法都会改变它,例如:OpenFileDialog每换一次目录就会改变它。因此,用这2个方法获取程序路径并不可靠。

文件操作所使用的路径就是这个路径,而真正需要用到的路径是根据程序启动位置的变化而变化的.所以应该获取的是: System.Windows.Forms.Application.StartupPath;获取启动应用程序的可执行文件的路径,不包括可执行文件的名称.然后在根据这个路径做文件操作,就没问题了.
以下是转载的原文:

C#获取程序路径的方法中需要注意的地方
版本1
获取运行程序路径的方法主要有以下7种:

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
他获取的是Module的文件名,如果在VS2008的调试环境中,获取的是 [程序名].vshost.exe的完整文件名。
System.Environment.CurrentDirectory
System.IO.Directory.GetCurrentDirectory()
这两个方法获得的路径是一样的,获得的是当前路径,这个路径不一定是程序所在的路径。任何会改变当前路径的方法都会改变它,例如:OpenFileDialog每换一次目录就会改变它。因此,用这2个方法获取程序路径并不可靠。
System.AppDomain.CurrentDomain.BaseDirectory
System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
这两个方法是可靠的获取程序路径的方法。返回的路径最末以"\"结尾。可以方便的在后面加入任何Path。当然就算没有也可以用Path.Combine来合并路径以获得想要的路径。
System.Windows.Forms.Application.StartupPath
这个方法也是可靠的获取程序路径的方法。不过返回的路径最末并没有"\"结尾。另外因为是Forms命名空间的。因此如果使用WPF还是不用的好。
System.Windows.Forms.Application.ExecutablePath
这个方法获取的是执行程序的完整文件名。是最可靠的方式,只需要去掉程序文件名就可以获得路径。
版本2:

//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

//获取和设置包含该应用程序的目录的名称。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

//获取应用程序的当前工作目录(不可靠)。
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
-------------------------------------------
C#获取本执行程序所在的当前路径
1.获取和设置当前目录的完全限定路径。
string str = System.Environment.CurrentDirectory;
Result: C:\xxx\xxx

2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string str = System.Windows.Forms.Application.StartupPath;
Result: C:\xxx\xxx

3.获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Result: C:\xxx\xxx\xxx.exe

4.获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
Result: C:\xxx\xxx\

5.获取应用程序的当前工作目录。
string str = System.IO.Directory.GetCurrentDirectory();
Result: C:\xxx\xxx

标签:文件,路径,string,C#,xxx,System,获取,exe
From: https://www.cnblogs.com/CS-ComputerScience/p/16835133.html

相关文章

  • 动态数组vector的相关用法
    1)头文件#include<vector>2)创建一维vector对象,vector<int>vec;3)尾部插入数字:vec.push_back(a);4)尾部元素弹出:vec.pop_back();相当于删除尾部元素。5)使用下标访问......
  • C#-多线程的使用Tread
    首先是概念,什么是线程?线程是操作系统分配CPU时间的基本单元,在一个进程中可以有多个线程同时执行代码。谈一谈什么是进程?简单的说,一个正在运行的应用程序可以视为一个进......
  • 2021 icpc 沈阳 I 【分式线性变换的保交比性】
    分式线性变换的保交比性对于分式线性变换,具有保交比性应用在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出。https:/......
  • CF981E Addition on Segments
    \(\text{Solution}\)一道有思维的\(hash\)题,考虑先确定了\(r0\)的长度,那么\(r1\)的长度也就确定了,这样我们可以用\(O(|T|)\)来确定每个\(0\)和\(1\)对应的字符串,可以用字......
  • VSCode-切换焦点时自动保存文件
    设置VSCode切换焦点时自动保存文件什么意思?有时候在VSCode下工作的时候突然需要去做别的事情,比如刚在Explorer窗口中新建了一个文件,但还没保存,这个时候切换到另一个窗......
  • Spring Cloud Netflix SideCar
    ​​PolyglotsupportwithSidecar​​​​spring-cloud-netflix-sidecar​​......
  • 07-项目训练_流程与快递表格创建~Express Service编写
    目录​​一,主要流程​​​​二,编码过程​​​​1,创建数据库表格​​​​2, API设计​​​​3,DAO接口编写​​​​4,SQL语句编写​​​​4.1向Express表添加记录​​​​4.2......
  • Oracle LogMiner 测试
    测试环境docker测试环境已安装好logminer,不用重复安装;$ORACLE_HOME/rdbms/admin/dbmslm.sql$ORACLE_HOME/rdbms/admin/dbmslmd.sqlLogMiner必须要要开补充日志,否则没有DML......
  • Spring Gateway 根据服务名路由失败,报错 Service Unavailable, status=503
    记一次路由转发失败的经历我的SpringBoot版本为2.6.6,本篇文章对于跟我差不多版本的同学应该都适用。使用gateway+nacos,yaml配置如下,这里使用的是服务名称进行转发:server:p......
  • 07-项目训练_编写MVC框架
    目录​​一,搭建web项目环境​​​​1,配置说明​​​​2,web项目创建过程​​​​3,将项目上传至GitHub​​​​二,编写MVC框架(建立对框架的认知)​​​​1,为什么要写这个框架?​......