运行应用程序的文件夹

时间:2014-07-04 12:28:01

标签: c# windows file-association

我的C#app有问题,当通过文件关联打开时,它在文件目录中工作。例如,当我创建打开文件的副本时:

File.Copy("C:\Photo\car.jpg", ".\car2.jpg"); // this is only ilustration code.

它创建新文件“C:\ Photo \ car2.jpg”,但我想在我的app目录中创建文件(“。\ car2.jpg”)。

所以,我认为,当通过文件关联打开app时,它会运行该文件的工作文件夹(“C:\ Photo \”)。有没有办法,如何将工作目录作为目录与app.exe保持一致?

修改

这不是解决方案,我需要等于“。\”和System.AppDomain.CurrentDomain.BaseDirectory:

File.Copy("C:\Photo\car.jpg", Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "car2.jpg"));

我必须在应用程序的许多地方使用它,解决方案可以设置:

Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

但我更喜欢通过文件关联在启动应用程序中设置它而不是在运行程序中 - 它看起来更干净。

谢谢, 的Jakub

2 个答案:

答案 0 :(得分:2)

要获取应用程序的路径,您可以使用:

 System.AppDomain.CurrentDomain.BaseDirectory

使用Path.Combine构建目标路径,如下所示:

 File.Copy("C:\Photo\car.jpg", Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "car2.jpg"));

答案 1 :(得分:0)

我想尝试提供替代方案。我对此比较陌生,但我想出了一个适合我的解决方案:

在MainWindow.xaml.cs中创建2个静态变量:

public static string fileOpen;
public static string workingDirectory;

在app.xaml.cs文件中,添加以下代码:

protected override void OnStartup(StartupEventArgs e)
{
    if (e.Args.Count() > 0)
    {
        var a = File.Exists(e.Args[0]);
        var path = Path.GetFullPath(e.Args[0]);
        MainICPUI.workingDirectory = Directory.GetCurrentDirectory();
        MainICPUI.fileOpen = e.Args[0];
    }

    base.OnStartup(e);
}

从任何目录打开与程序关联的文件时,会将完整文件名添加到StartupEventArgs,包括目录。此代码保存目录。

返回MainWindow.xaml.cs文件:

public static string fileOpen;
public static string workingDirectory;

public MainWindow()
{
    InitializeComponent();

    Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
    // This sets the directory back to the program directory, so you can do what you need
    // to with files associated with your program
}

// Make sure your MainWindow has an OnLoaded event assigned to:
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
    // Now I'm setting the working directory back to the file location
    Directory.SetCurrentDirectory(workingDirectory);

    if (File.Exists(fileOpen))
    {
        var path = Path.GetFullPath(fileOpen);
        // This should be the full file path of the file you clicked on.
    }
}