none
请教c#相对路径 RRS feed

  • 问题

  • 我的程序执行文件在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1\bin\Debug

    而我想在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1目录下读取报表文件

    请问怎样获取这个路径:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1

    我在百度查了一下,这个代码不行哦

    string path=System.Windows.Forms.Application.StartupPath + @"../../../";
    System.IO.Directory.SetCurrentDirectory(path);
    FileInfo OldFileName = new FileInfo(System.IO.Dir……
    
    

    2011年7月17日 15:48

答案

  • 你好

    或者你可以嘗試以下的Code

    string CurrentEXEFile = (new System.Uri(System.Reflection.Assembly.GetEntryAssembly().CodeBase)).AbsolutePath;
          MessageBox.Show(CurrentEXEFile);
          string CurrentExePath = System.IO.Path.GetDirectoryName(CurrentEXEFile);
          MessageBox.Show(CurrentExePath);
          string ChangedPath = System.IO.Path.Combine(CurrentExePath, "..\\..\\");
          //string ChangedPath = System.IO.Path.Combine("在前的路徑", "使用..\\..\\ 來找出relative path"); 
          MessageBox.Show(ChangedPath);
    

    可以參考Path.Combine 方法

    http://msdn.microsoft.com/zh-cn/library/system.io.path.combine.aspx

    Please correct me if my concept is wrong


    Chi
    2011年7月17日 19:30
    版主
  • dear

    你应该确认报表资料的资夹complier后会跟着.exe跑,以减少一些错误的发生

    你可以这样做:

    你在VS里先将该报表加入至VS方案→然后对该挡案按下右键→复制到输出目录→永远复制

    如此一来挡案就能确保有被复制,就比较不会发生找不到挡案的情况。

    我个人的做法是会在用资料夹做一下分类,如此一来就算挡案太多也不需要害怕资料夹看起来凌乱

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年7月18日 2:04
  • 我的程序执行文件在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1\bin\Debug

    而我想在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1目录下读取报表文件

    请问怎样获取这个路径:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1

    我在百度查了一下,这个代码不行哦


    楼主:)

    string path = Application.StartupPath;
                path = path.Replace("bin\\Debug","");
                MessageBox.Show(path);


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月18日 6:22
    版主
  • dear

    Path类别也可以达到你要的上一层目录

     

       string fileName = Application.StartupPath;
       string temp = "";
       temp = Path.GetDirectoryName(fileName);//取得上一层目录
       string temp1 = Path.GetDirectoryName(temp);
    


     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年7月18日 15:44
  • 这个比较好

    var startupPath =@"a:\A\B\C\D";;
    var realPath =Directory.GetParent(baseDirectory).Parent.FullName 
    2011年7月18日 15:52

全部回复

  • 你好

    或者你可以嘗試以下的Code

    string CurrentEXEFile = (new System.Uri(System.Reflection.Assembly.GetEntryAssembly().CodeBase)).AbsolutePath;
          MessageBox.Show(CurrentEXEFile);
          string CurrentExePath = System.IO.Path.GetDirectoryName(CurrentEXEFile);
          MessageBox.Show(CurrentExePath);
          string ChangedPath = System.IO.Path.Combine(CurrentExePath, "..\\..\\");
          //string ChangedPath = System.IO.Path.Combine("在前的路徑", "使用..\\..\\ 來找出relative path"); 
          MessageBox.Show(ChangedPath);
    

    可以參考Path.Combine 方法

    http://msdn.microsoft.com/zh-cn/library/system.io.path.combine.aspx

    Please correct me if my concept is wrong


    Chi
    2011年7月17日 19:30
    版主
  • dear

    你应该确认报表资料的资夹complier后会跟着.exe跑,以减少一些错误的发生

    你可以这样做:

    你在VS里先将该报表加入至VS方案→然后对该挡案按下右键→复制到输出目录→永远复制

    如此一来挡案就能确保有被复制,就比较不会发生找不到挡案的情况。

    我个人的做法是会在用资料夹做一下分类,如此一来就算挡案太多也不需要害怕资料夹看起来凌乱

     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年7月18日 2:04
  • 我的程序执行文件在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1\bin\Debug

    而我想在:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1目录下读取报表文件

    请问怎样获取这个路径:D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1

    我在百度查了一下,这个代码不行哦


    楼主:)

    string path = Application.StartupPath;
                path = path.Replace("bin\\Debug","");
                MessageBox.Show(path);


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月18日 6:22
    版主
  • 我知道发布的时候报表会放在D:\C# practice\WindowsCrystalReport1\WindowsCrystalReport1\bin\Debug路径下的,只不过我现在做的是练习,所以才想用相对路径
    2011年7月18日 14:28
  • 这个写法不错

    2011年7月18日 14:29
  • dear

    有几个例子你可参考

    http://www.dotblogs.com.tw/larrynung/archive/2011/03/15/21849.aspx

    http://www.dotblogs.com.tw/larrynung/archive/2011/03/17/21882.aspx


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年7月18日 15:38
  • dear

    Path类别也可以达到你要的上一层目录

     

       string fileName = Application.StartupPath;
       string temp = "";
       temp = Path.GetDirectoryName(fileName);//取得上一层目录
       string temp1 = Path.GetDirectoryName(temp);
    


     


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年7月18日 15:44
  • 好的很好的文章
    2011年7月18日 15:46
  • 这个比较好

    var startupPath =@"a:\A\B\C\D";;
    var realPath =Directory.GetParent(baseDirectory).Parent.FullName 
    2011年7月18日 15:52
  • 谢谢分享经验。


    Best Regards,
    Rocky Yue[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年7月19日 7:10
    版主