怎么取当前目录的上一层目录呀

tanshihou 2015-03-06 09:32:02
/aaa/bbb/ccc/Debug/abc.exe
/log

现在通过
System.Environment.CurrentDirectory
这个函数能取到
/aaa/bbb/ccc/Debug/
但是我想再上三层,取到
/aaa
之后再拼成
/aaa/log然后在里面生成log文件

这个要怎么做呀,谢谢了
...全文
336 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 17 楼 FoxDave 的回复:
怎么都用字符串截取呢? 不是应该通过目录对象去获取吗
Justin-Liu 2015-03-06
  • 打赏
  • 举报
回复
怎么都用字符串截取呢? 不是应该通过目录对象去获取吗
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
比如源目录有9层 不管是从哪里开始(是根目录或不是根目录) 分解出来之后索引是0,1,2,3,4,5,6,7,8 那么你拼接的时候,只拼接0,1,2,3,4,5,然后加上你的log,6,7,8不要了,不就得了
呵呵
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 14 楼 yanran_hill 的回复:

void GetParent(string path) 
        {
            try 
            {
                System.IO.DirectoryInfo directoryInfo =
                    System.IO.Directory.GetParent(path);

                System.Console.WriteLine(directoryInfo.FullName);
            }
            catch (ArgumentNullException) 
            {
                System.Console.WriteLine("Path is a null reference.");
            }
            catch (ArgumentException) 
            {
                System.Console.WriteLine("Path is an empty string, " +
                    "contains only white spaces, or " +
                    "contains invalid characters.");
            }
        }
高手终于出现了,感觉这个靠谱 试一下,谢谢了
yanran_hill 2015-03-06
  • 打赏
  • 举报
回复

void GetParent(string path) 
        {
            try 
            {
                System.IO.DirectoryInfo directoryInfo =
                    System.IO.Directory.GetParent(path);

                System.Console.WriteLine(directoryInfo.FullName);
            }
            catch (ArgumentNullException) 
            {
                System.Console.WriteLine("Path is a null reference.");
            }
            catch (ArgumentException) 
            {
                System.Console.WriteLine("Path is an empty string, " +
                    "contains only white spaces, or " +
                    "contains invalid characters.");
            }
        }
於黾 2015-03-06
  • 打赏
  • 举报
回复
比如源目录有9层 不管是从哪里开始(是根目录或不是根目录) 分解出来之后索引是0,1,2,3,4,5,6,7,8 那么你拼接的时候,只拼接0,1,2,3,4,5,然后加上你的log,6,7,8不要了,不就得了
於黾 2015-03-06
  • 打赏
  • 举报
回复
你不是固定要3层之前吗 那么取Index=Length-3不就好了
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 10 楼 duanzi_peng 的回复:
[quote=引用 9 楼 tanshihou 的回复:] [quote=引用 8 楼 duanzi_peng 的回复:] [quote=引用 4 楼 tanshihou 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
因为根目录不是aaa 所以index=0的不一定是什么 谢谢了[/quote] 你就取index = 0 的值就行了,我也没说取出来的一定的aaa呀。[/quote] 如果exe是这样的 C:\aaa\bbb\ccc\ddd\eee\fff\ggg\hhh\iii\jjj\kkk\Debug\abc.exe 我去index=0有什么用呀[/quote] 晕死。。。。。如果是这样,你取index = 1 就是了。 index 只是个索引值,想取那一个就给那一个值的下标。[/quote] 所以说呀,那只是一个索引,取0或者取1都没有用 如果没有什么好的方法的话, 如果只能把它按照string去自己写逻辑判断的话 也得是从后面取, 因为后面是可知的 而前面的index=0,1,2,3,4,5,6,7,8,9 都不一定是什么
exception92 2015-03-06
  • 打赏
  • 举报
回复
引用 9 楼 tanshihou 的回复:
[quote=引用 8 楼 duanzi_peng 的回复:] [quote=引用 4 楼 tanshihou 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
因为根目录不是aaa 所以index=0的不一定是什么 谢谢了[/quote] 你就取index = 0 的值就行了,我也没说取出来的一定的aaa呀。[/quote] 如果exe是这样的 C:\aaa\bbb\ccc\ddd\eee\fff\ggg\hhh\iii\jjj\kkk\Debug\abc.exe 我去index=0有什么用呀[/quote] 晕死。。。。。如果是这样,你取index = 1 就是了。 index 只是个索引值,想取那一个就给那一个值的下标。
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 8 楼 duanzi_peng 的回复:
[quote=引用 4 楼 tanshihou 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
因为根目录不是aaa 所以index=0的不一定是什么 谢谢了[/quote] 你就取index = 0 的值就行了,我也没说取出来的一定的aaa呀。[/quote] 如果exe是这样的 C:\aaa\bbb\ccc\ddd\eee\fff\ggg\hhh\iii\jjj\kkk\Debug\abc.exe 我去index=0有什么用呀
exception92 2015-03-06
  • 打赏
  • 举报
回复
引用 4 楼 tanshihou 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:] 作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
因为根目录不是aaa 所以index=0的不一定是什么 谢谢了[/quote] 你就取index = 0 的值就行了,我也没说取出来的一定的aaa呀。
於黾 2015-03-06
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
可以使用相对路径 ../就表示后退一层 ../../../log 这个路径就是向上3层再进入log
当然,这样用会有个问题,因为使用相对路径会改变当前工作目录 所以第一次好用,但是之后当前工作目录就已经变成log目录了,再继续这样,就不知道退到哪里去了,可能就找不到路径了 所以最好还是不要乱用相对路径,而使用绝对路径 最好不要使用当前工作目录,它会因为使用了相对路径或使用了OpenFileDialog,SaveFileDialog而改变 使用Application.StartPath,这是程序启动路径,如果你的程序不是由外部程序启动,而是手动双击执行的,那么这个启动路径就是exe文件所在的路径
於黾 2015-03-06
  • 打赏
  • 举报
回复
或者用split分解出来,重新拼接,重新拼接的时候把最后3个丢弃,把log拼接到后面
於黾 2015-03-06
  • 打赏
  • 举报
回复
可以使用相对路径 ../就表示后退一层 ../../../log 这个路径就是向上3层再进入log
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
因为根目录不是aaa 所以index=0的不一定是什么 谢谢了
tanshihou 2015-03-06
  • 打赏
  • 举报
回复
想完成的就是exe所在的路径的上三层里面 有一个log的文件夹 想在log文件夹里面生成文件 就是这个上三层这个动作不知道怎么完成
exception92 2015-03-06
  • 打赏
  • 举报
回复
作为字符串,使用Split分组,取出index=0 的第一个aaa ,再拼接。
异常异长 2015-03-06
  • 打赏
  • 举报
回复
直接取绝对路径更好吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧