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

关于文件的默认读取和保存路径(转)相关推荐

  1. python更改保存路径,Jupyter Notebook更改保存文件的默认路径(方法汇总,亲测有效)...

    Jupyter Notebook更改保存文件的默认路径(方法汇总,亲测有效) Jupyter Notebook更改保存文件的默认路径(方法汇总,亲测有效) 一.找到默认的文件保存地址 1.先创建一个文 ...

  2. java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解

    java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...

  3. 根据文件名或文件扩展名获取文件的默认图标

    新建一个vs2010 窗体项目,新建按钮button和图片picturebox 下面是程序 using System; using System.Collections.Generic; using ...

  4. golang 文件 文件夹 创建 读取 移动 复制 写入 遍历

    目录 文件读取 创建 写入 移动 拷贝 删除 文件 创建文件夹 文件覆盖判断 遍历文件夹 权限 文件操作, 大体分为两部分: os库 : 文件\文件夹创建,读取,移动,复制 io库 : 文件内容的写入 ...

  5. python读取大文件-Python如何读取、拆分大文件

    简述 最近和第三方数据接触较多,数据量也开始陡增,从一开始的1KW行,最大到了1亿行,这让我这个常年处理"小数据'的人有点捉襟见肘.本来数据放在hive中也是可以操作的,但是有时候需求是做一 ...

  6. 成功解决pandas读取文件中不读取第一索引列

    成功解决pandas读取文件中不读取第一索引列 目录 解决问题 解决思路 解决方法 解决问题 解决pandas读取文件中不读取第一索引列 解决思路 pandas输出时会默认增加一列索引列 解决方法 添 ...

  7. while和for循环读取大文件三种读取文件方式

    目录 While和for循环 读写文件 三种读操作比较 read()读文件 readline()读文件 readlines()读文件 While和for循环 for循环实现猜三次年纪 age = 66 ...

  8. 【Notes8】Linux开发环境,Linux命令,vi命令,/正则,Hash,iNode,文件查找与读取,Linux开机自启动

    文章目录 1.VMware和CentOS安装:两个网络适配器是虚拟机的,Linux抄袭unix,Mac os是unix的皮肤 2.CRT安装:netstat -nal | grep 22,改注册信息要 ...

  9. 【PHP】文件写入和读取详解

    文章提纲: 一.实现文件读取和写入的基本思路 二.使用fopen方法打开文件 三.文件读取和文件写入操作 四.使用fclose方法关闭文件 五.文件指针的移动 六.Windows和UNIX下的回车和换 ...

最新文章

  1. 报名 | 极简大数据决策,培养数据化思维讲座
  2. Android之ListView原理学习与优化总结
  3. UDP(首部)和TCP(首部、三次握手、四次挥手、可靠传输、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复))
  4. 令xtu3service开机时立即启动_Mac开机时可以使用的快捷键 苹果电脑快捷键使用介绍...
  5. ListView控件获取选中项的内容 c# 114867417
  6. 知识图谱开源社区_您需要了解的关于开源社区中的倦怠的知识
  7. C# via CLR之IL中间语言初步探索
  8. Navsoso引领HUD抬头导航潮流
  9. Django--CRM-客户列表展示, 分页
  10. 世界地图可以无限放大_做外贸有哪些软件可以推荐?
  11. python怎么爬取新浪微博数据_新浪微博爬虫,用python爬取新浪微博数据
  12. Windows 安装PHP SG11插件
  13. 如何使用SIGFOX技术连接物联网?
  14. MySQL GROUP_CONCAT()函数的排序方法
  15. python软件长什么样子图片高清_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  16. mysql数据自增ID为2的解决办法
  17. 北林嵌入式系统期末复习重点
  18. 自上而下还是自下而上
  19. 5610连接MMMB并显示隐藏文件夹的方法
  20. 《吕鑫:VC++6.0就业培训宝典之MFC视频教程》学习笔记 -- 第二章 MFC原理介绍

热门文章

  1. JavaScript 数字转汉字+element时间选择器快速选择
  2. 3月29日 如何在winform中加入动态系统时间
  3. 关于zendframework中的Zend_Db_Expr(不自动加引号)
  4. Ubuntu 安装LAMP ...
  5. pandas 提取数字_经验轻松提取Meta原始文献特征
  6. 将成化学键的成键过程理解成是用分子测量本征值的过程
  7. 广义逆高斯分布及推广(To be continued)
  8. 三步解决C语言中struct字节对齐问题,Python进阶篇-struct字节对齐问题
  9. ps怎么把一个颜色替换成另一个颜色_常用的60个PS技巧,助你成为PS大神!
  10. java获取服务器信息吗_java获取服务器一些信息的方法