WINFORM如何获取当前文件的绝对路径?

时间:2022-06-22 12:47:49
  //FileInfo fi = new FileInfo();  fi.FUllname
和Application.StartupPath;我都试过了。。取的都不对。。
这是为什么。。。。?
我要的是在当前项目下一个文件的绝对路径,但它取的总是整个解决方安的Output下的路径。。请问各位有方法吗?

38 个解决方案

#1


你的可执行文件编译到这里就应该使这个Output

#2


Environment.CurrentDirectory

#3


Application.StartupPath 可以获取当前程序的启动路径

#4


这是由于你项目的启动目录没有设置的原因

如果直接运行程序的话,它是正确的

#5


System.IO.Path.GetFullPath(filename);

这个总可以吧

#6


引用 5 楼 wangkuang5 的回复:
System.IO.Path.GetFullPath(filename); 

这个总可以吧

这个还是不行。。还有其他的办法吗?

#7


引用 5 楼 wangkuang5 的回复:
System.IO.Path.GetFullPath(filename); 

这个总可以吧

up

#8


参见这个。假如你那个文件名叫:        Program.cs 
   string aaa = AppDomain.CurrentDomain.BaseDirectory + "Program.cs";
   textBox1.Text=Path.GetFullPath(aaa);

#9


引用楼主 liming0605 的帖子:
  //FileInfo fi = new FileInfo();  fi.FUllname 
和Application.StartupPath;我都试过了。。取的都不对。。 
这是为什么。。。。? 
我要的是在当前项目下一个文件的绝对路径,但它取的总是整个解决方安的Output下的路径。。请问各位有方法吗? 

说老实话,你的问题我没看明白 “当前项目下一个文件的绝对路径” 这句话是什么意思呢?
如果是在工程目录下,取到文件是没有意义的。因为你发布的时候难道还带着工程? 必然是Output(bin)

所以你能取到的目录都是相对于你所说的Output目录。

#10


用DirectoryInfo 呢?

#11


引用 9 楼 cancerser 的回复:
引用楼主 liming0605 的帖子:
  //FileInfo fi = new FileInfo();  fi.FUllname 
和Application.StartupPath;我都试过了。。取的都不对。。 
这是为什么。。。。? 
我要的是在当前项目下一个文件的绝对路径,但它取的总是整个解决方安的Output下的路径。。请问各位有方法吗? 
 
说老实话,你的问题我没看明白 “当前项目下一个文件的绝对路径” 这句话是什么意思呢? 
如果是在工程目录下,取到文件是没有意义的。因为你…

我的意思是取当前项目下一个文件的绝对路径。。。我的目的就是这个。。。不要跟发布什么的搞在一起。。。
我另有用途嘛。。

#12


楼上各位所说的我都试过了。。
取的都只是当前编译后的目录

#13


Application.StartupPath  取到你执行文件的绝对路径,然后根据你文件与这个文件的相对路径,得到文件的绝对路径。
如果是打开了一个文件 FullName 应该是没问题的。.

#14


我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

#15


引用 14 楼 ojlovecd 的回复:
我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

就是说我的工程下的一个文件。比如FORM1.CS。。

#16


我也想知道这个问题,我现在都是一层一层往上转的
如:


  System.IO.DirectoryInfo mDir = new System.IO.DirectoryInfo(System.Windows.Forms.Application.StartupPath);
            System.IO.DirectoryInfo dir = mDir.Parent;
            System.IO.DirectoryInfo dir_a = dir.Parent;
String str=dir_a.FullName;

#17


参考StackFrame.GetFileName 方法
不知道你为什么需要获得代码文件的路径~~~

获得更多跟 Exception 有关的信息??

http://msdn.microsoft.com/zh-tw/library/system.diagnostics.stackframe.getfilename(VS.80).aspx
http://blog.joycode.com/ghj/archive/2008/03/05/114925.aspx

#18


Response.Write(Request.PhysicalApplicationPath);

#19


引用 15 楼 liming0605 的回复:
引用 14 楼 ojlovecd 的回复:
我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

就是说我的工程下的一个文件。比如FORM1.CS。。
呵呵,是在IDE下的绝对路径,是这个意思吗?

#20


application.startpath

#21


application.startpath获取程序启动位置绝对路径

#22


引用 2 楼 ojlovecd 的回复:
Environment.CurrentDirectory

这个就是绝对路径了

#23


up

#24


Application.ExecutablePath.Trim()

#25


引用 22 楼 huoxudong125 的回复:
引用 2 楼 ojlovecd 的回复:
Environment.CurrentDirectory 
 
这个就是绝对路径了


你的办法是绝对不行的,默认是当前程序目录,当程序中有打开或者选择文件对话框时,目录就会改变

#26


AppDomain.CurrentDomain.BaseDirectory

#27


你能获取到文件的fileInfo,不明白FullName属性为什么不行

#28


ding

#29


你为什么要获取cs file 路径? 你的程序运行的时候,已经把他们build 到dll 或者是exe 里面了

#30


就自己一层一层转吧,搞那么麻烦干什么,好像C/S的都不能直接得到当前文件路径的,只有程序启运的路径
就根据这个路径一层一层往上找

#31


up

#32


对,一层一层转可以实现,我刚做完,给你个例子你参考吧
         /// <summary>
        /// 根据从数据库中提取出来的文件路径,分离出在客户端头像的路径
         /// </summary>
        /// <param name="fileName">数据库中提取出来的文件路径</param>
        /// <param name="faceFlag">是否进入客户端头像目录下</param>
        /// <returns>faceFalg为True时,返回头像目录下的头像全路径,当faceFalg为False时,返回用户ID目录下的头像全路径        </returns>
        public string getImgPath(string fileName, bool faceFlag)
        {
            int place;
            string comPath = Application.StartupPath;
            for (int i = 0; i < 2; i++)
            {
                place = comPath.LastIndexOf("\\");
                comPath = comPath.Remove(place);
            }
            if (!faceFlag)
            {
                if (Directory.Exists(comPath + @"\\" + myInfo.Key.ToString()))
                {
                    comPath = comPath + @"\\" + myInfo.Key.ToString() + fileName;
                }
                else
                {
                    Directory.CreateDirectory(comPath + @"\\" + myInfo.Key.ToString());
                    comPath = comPath + @"\\" + myInfo.Key.ToString() + fileName;
                }
            }
            else if (faceFlag)
            {
                 comPath = comPath + @"\NEWFACE\" + fileName;
            }
            return comPath;
        }

别直接用啊,你改改吧,可以改成动态形式的,大体的形式如此

#33


采用当前节点的路径
   

#34


 OpenFileDialog ofd=new OpenFileDialog();
if(DialogResult.OK==ofd.ShowDialog())
{
 string fileName =ofd.FileName;
 MessageBox.Show(fileName);
}
这样得到的肯定是你要的。

#35


不错。。。。可以用

http://webczw.3322.org

#36


什么状况

#37


学习……up

#38


学习---up

#1


你的可执行文件编译到这里就应该使这个Output

#2


Environment.CurrentDirectory

#3


Application.StartupPath 可以获取当前程序的启动路径

#4


这是由于你项目的启动目录没有设置的原因

如果直接运行程序的话,它是正确的

#5


System.IO.Path.GetFullPath(filename);

这个总可以吧

#6


引用 5 楼 wangkuang5 的回复:
System.IO.Path.GetFullPath(filename); 

这个总可以吧

这个还是不行。。还有其他的办法吗?

#7


引用 5 楼 wangkuang5 的回复:
System.IO.Path.GetFullPath(filename); 

这个总可以吧

up

#8


参见这个。假如你那个文件名叫:        Program.cs 
   string aaa = AppDomain.CurrentDomain.BaseDirectory + "Program.cs";
   textBox1.Text=Path.GetFullPath(aaa);

#9


引用楼主 liming0605 的帖子:
  //FileInfo fi = new FileInfo();  fi.FUllname 
和Application.StartupPath;我都试过了。。取的都不对。。 
这是为什么。。。。? 
我要的是在当前项目下一个文件的绝对路径,但它取的总是整个解决方安的Output下的路径。。请问各位有方法吗? 

说老实话,你的问题我没看明白 “当前项目下一个文件的绝对路径” 这句话是什么意思呢?
如果是在工程目录下,取到文件是没有意义的。因为你发布的时候难道还带着工程? 必然是Output(bin)

所以你能取到的目录都是相对于你所说的Output目录。

#10


用DirectoryInfo 呢?

#11


引用 9 楼 cancerser 的回复:
引用楼主 liming0605 的帖子:
  //FileInfo fi = new FileInfo();  fi.FUllname 
和Application.StartupPath;我都试过了。。取的都不对。。 
这是为什么。。。。? 
我要的是在当前项目下一个文件的绝对路径,但它取的总是整个解决方安的Output下的路径。。请问各位有方法吗? 
 
说老实话,你的问题我没看明白 “当前项目下一个文件的绝对路径” 这句话是什么意思呢? 
如果是在工程目录下,取到文件是没有意义的。因为你…

我的意思是取当前项目下一个文件的绝对路径。。。我的目的就是这个。。。不要跟发布什么的搞在一起。。。
我另有用途嘛。。

#12


楼上各位所说的我都试过了。。
取的都只是当前编译后的目录

#13


Application.StartupPath  取到你执行文件的绝对路径,然后根据你文件与这个文件的相对路径,得到文件的绝对路径。
如果是打开了一个文件 FullName 应该是没问题的。.

#14


我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

#15


引用 14 楼 ojlovecd 的回复:
我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

就是说我的工程下的一个文件。比如FORM1.CS。。

#16


我也想知道这个问题,我现在都是一层一层往上转的
如:


  System.IO.DirectoryInfo mDir = new System.IO.DirectoryInfo(System.Windows.Forms.Application.StartupPath);
            System.IO.DirectoryInfo dir = mDir.Parent;
            System.IO.DirectoryInfo dir_a = dir.Parent;
String str=dir_a.FullName;

#17


参考StackFrame.GetFileName 方法
不知道你为什么需要获得代码文件的路径~~~

获得更多跟 Exception 有关的信息??

http://msdn.microsoft.com/zh-tw/library/system.diagnostics.stackframe.getfilename(VS.80).aspx
http://blog.joycode.com/ghj/archive/2008/03/05/114925.aspx

#18


Response.Write(Request.PhysicalApplicationPath);

#19


引用 15 楼 liming0605 的回复:
引用 14 楼 ojlovecd 的回复:
我想大家都不太明白你说的“当前项目下一个文件的绝对路径”是什么意思,能详细点吗?

就是说我的工程下的一个文件。比如FORM1.CS。。
呵呵,是在IDE下的绝对路径,是这个意思吗?

#20


application.startpath

#21


application.startpath获取程序启动位置绝对路径

#22


引用 2 楼 ojlovecd 的回复:
Environment.CurrentDirectory

这个就是绝对路径了

#23


up

#24


Application.ExecutablePath.Trim()

#25


引用 22 楼 huoxudong125 的回复:
引用 2 楼 ojlovecd 的回复:
Environment.CurrentDirectory 
 
这个就是绝对路径了


你的办法是绝对不行的,默认是当前程序目录,当程序中有打开或者选择文件对话框时,目录就会改变

#26


AppDomain.CurrentDomain.BaseDirectory

#27


你能获取到文件的fileInfo,不明白FullName属性为什么不行

#28


ding

#29


你为什么要获取cs file 路径? 你的程序运行的时候,已经把他们build 到dll 或者是exe 里面了

#30


就自己一层一层转吧,搞那么麻烦干什么,好像C/S的都不能直接得到当前文件路径的,只有程序启运的路径
就根据这个路径一层一层往上找

#31


up

#32


对,一层一层转可以实现,我刚做完,给你个例子你参考吧
         /// <summary>
        /// 根据从数据库中提取出来的文件路径,分离出在客户端头像的路径
         /// </summary>
        /// <param name="fileName">数据库中提取出来的文件路径</param>
        /// <param name="faceFlag">是否进入客户端头像目录下</param>
        /// <returns>faceFalg为True时,返回头像目录下的头像全路径,当faceFalg为False时,返回用户ID目录下的头像全路径        </returns>
        public string getImgPath(string fileName, bool faceFlag)
        {
            int place;
            string comPath = Application.StartupPath;
            for (int i = 0; i < 2; i++)
            {
                place = comPath.LastIndexOf("\\");
                comPath = comPath.Remove(place);
            }
            if (!faceFlag)
            {
                if (Directory.Exists(comPath + @"\\" + myInfo.Key.ToString()))
                {
                    comPath = comPath + @"\\" + myInfo.Key.ToString() + fileName;
                }
                else
                {
                    Directory.CreateDirectory(comPath + @"\\" + myInfo.Key.ToString());
                    comPath = comPath + @"\\" + myInfo.Key.ToString() + fileName;
                }
            }
            else if (faceFlag)
            {
                 comPath = comPath + @"\NEWFACE\" + fileName;
            }
            return comPath;
        }

别直接用啊,你改改吧,可以改成动态形式的,大体的形式如此

#33


采用当前节点的路径
   

#34


 OpenFileDialog ofd=new OpenFileDialog();
if(DialogResult.OK==ofd.ShowDialog())
{
 string fileName =ofd.FileName;
 MessageBox.Show(fileName);
}
这样得到的肯定是你要的。

#35


不错。。。。可以用

http://webczw.3322.org

#36


什么状况

#37


学习……up

#38


学习---up