正在运行的应用程序的文件夹
本文关键字:应用程序 文件夹 运行 | 更新日期: 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.
}
}