正在运行的应用程序的文件夹

本文关键字:应用程序 文件夹 运行 | 更新日期: 2023-09-27 18:11:39

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

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

它使新文件"C:'Photo'car2.jpg",但我想使文件在我的应用程序目录(".'car2.jpg")。

所以,我认为,当应用程序通过文件关联打开时,它运行该文件的工作文件夹("C:'Photo'")。有办法,如何保持工作目录目录与app.exe?

编辑:

这不是解决方案,我需要得到等于"。'" and 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

正在运行的应用程序的文件夹

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

 System.AppDomain.CurrentDomain.BaseDirectory

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

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

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

在mainwindow . example .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 . example .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.
    }
}