none
关于“当前工作目录”的问题? RRS feed

  • 问题

  • 当前工作目录是指当前程序所使用的目录,当程序A中调用、运行了第三方程序B后,当前工作目录可能会发生变化,这时候,运行下面的代码就会出问题:
    FileStream fs = new FileStream(_appPath, FileMode.Open, FileAccess.Read)
    

    调试发现,上面的代码访问不了_appPath所指向的文件,这里_appPath指向的是相对路径的文件。通过运行方法Directory.GetCurrentDirectory()进一步寻找原因,发现当前工作目录确实已经发生了变化:从最初的程序A的工作目录变成了程序B的工作目录,即使B已经退出后,仍然如此。

    怎么解决这个问题呢?使用绝对路径,当然可以,但是我不想放弃使用相对路径,请指教,谢谢!

    2011年12月26日 6:25

答案

全部回复

  • 您好

    請嘗試其他取得的方式,參考

    取得目前執行程式的目錄

    http://www.dotblogs.com.tw/atowngit/archive/2009/08/23/10198.aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年12月26日 6:47
  • 请试试看

    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    





    2011年12月26日 6:51
  • 感谢楼上二位的答复,我尝试过使用System.AppDomain.CurrentDomain.BaseDirectory可以得到正确的路径,但是我的问题是:运行代码
    FileStream fs = new FileStream(_appPath, FileMode.Open, FileAccess.Read)
    
    时,其中_appPath=@"Image\aaa.png",这种情况下,怎么才能保证结果正常;当然如果写成_appPath=绝对路径+@"Image\aaa.png",是没有问题的。
    谢谢指教!
    2011年12月26日 8:33
  • dear

    1.你用了A.exe呼叫了B.exe,代表目前的AppDomain是A.exe,用System.AppDomain.CurrentDomain.BaseDirectory会取得A.exe的目录

    2.要看你的挡案路径是在哪里,若是在原本的AppDomain,直接用@"Image\aaa.png"就可以,若不是就必须要用 绝对路径+@"Image\aaa.png",才能取得挡案呀


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年12月26日 11:17
  • HI,JSHZP

    我和你碰到过同样的问题,某国内国产虚拟打印机存在此问题, 我已经向该公司发了邮件,但可惜他们没有重视我的邮件。

    我用的方法是在内存中存储在A启动之后的目录PATH,然后在使用该目录的时候直接使用PATH。

    期待找出更优的解决方案。

    2011年12月26日 12:57
  • 感谢楼上二位的答复,我尝试过使用System.AppDomain.CurrentDomain.BaseDirectory可以得到正确的路径,但是我的问题是:运行代码
    FileStream fs = new FileStream(_appPath, FileMode.Open, FileAccess.Read)
    
    时,其中_appPath=@"Image\aaa.png",这种情况下,怎么才能保证结果正常;当然如果写成_appPath=绝对路径+@"Image\aaa.png",是没有问题的。
    谢谢指教!


    建议:

    1)直接把需要的文件拷贝到exe同路径中(包括文件夹也是如此)。

    2)使用System.Windows.Forms.Application.StartupPath(同意小欧MVP的说法——假设你拷贝一个Image文件夹,里边有aaa.png文件)。那么:

    string s = System.Windows.Forms.Application.StartupPath;
    if(!s.EndWith("\\"))
    {
        s+="\\";
    }
    s+="Image\aaa.png";
    //此处使用你自己的s就可以了。
    

     


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月27日 2:08
    版主