[C#]同样是获取“当前路径”

Photobucket

最近开始在用 Ruby On Rails 写网络应用,同时,也将通过 ruby script,将过去“半自动化”的工作,争取实现“完全自动化”。不过在操作excel文档方面,目前还是感觉用C#比较方便一些,所以C#暂时还是没法扔。而 VIM 则相当高深,想全面转入 ubuntu 生态圈,还没法那么快。还是要在 windows 下做一些“急迫”的开发。而在写批处理bat程序的时候,发现一个很有趣的问题,就是对C#读取当前路径的获取。如果一直都是用F5、或是双击运行程序的话,倒也无所谓,但如果是通过命令行(批处理当然也算命令行),就比较有玄机。

不妨写个例程看看,比较一下C#中对“当前路径”的获取。新建一个命令行程序,贴入如下内容。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PathTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("\nAppDomain.CurrentDomain.BaseDirectory");
            Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

            Console.WriteLine("\nSystem.Threading.Thread.GetDomain().BaseDirectory");
            Console.WriteLine(System.Threading.Thread.GetDomain().BaseDirectory);

            Console.WriteLine("\nEnvironment.CurrentDirectory");
            Console.WriteLine(Environment.CurrentDirectory);

            Console.WriteLine("\nSystem.IO.Directory.GetCurrentDirectory()");
            Console.WriteLine(System.IO.Directory.GetCurrentDirectory());

            Console.ReadKey();
        }
    }
}

按F5运行的话,其实并不会出现文章开头那张截图的效果,而是这样:
Photobucket
结果基本一致,无非是一个末尾有没有“\”的区别,似乎没什么关系,怎么都能用。

而如果在命令行中调用,而且是那种没有经过n次cd,当前路径在远处的话,调用起来就会出现标题图那样的效果。BaseDirectory()获取的是程序所在文件夹的绝对路径(其实我要的是这种效果,过去没去区分),而GetCurrentDirectory()获取的是执行程序的真正的“当前路径”。

关于aGuegu

向着更高的逼格
此条目发表在C#分类目录,贴了, , , , , , 标签。将固定链接加入收藏夹。