我创建了一个c#解决方案(“ biblioTk”)。然后,我添加了其他一些项目:“ biblioTk2”和包含测试方法的biblioTkTests。在我需要管理保存文件之前,所有这些工作都很好。在我的测试方法中,我想测试是否存在保存文件,或者删除保存文件(准备项目并在S / O单击“保存”按钮时查看是否创建了文件)。
测试方法调用工具类(“ FileManager”),该类旨在处理文件管理。在此类的方法中,我使用appDir=Environment.CurrentDirectory;
,但是此方法未返回正确的路径:is返回“” C:\ Users \ lolve \ source \ repos \ biblioTk \ TestResults \ lolve_DESKTOP-9AOEDTO 2018-10 -12 11_10_24 \ Out“”
我想要的是到当前正在执行的exe文件的路径,如“ C:\ Users \ lolve \ source \ repos \ biblioTk2 \ bin \ Debug \ biblioTk2.exe”
我认为这是一个很大的问题:启动应用程序和进行调试时,Environment.CurrentDirectory返回的目录不同...
这是我的FileManager类:
public class FileManager
{
private string SAVEFILE = "datas.saved";
public string appDir = null;
public string pathToSaveFile = null;
public FileManager()
{
//appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
appDir = Environment.CurrentDirectory;
pathToSaveFile = Path.Combine(appDir, SAVEFILE).Replace("file:\\","");
}
public Boolean saveFileExists()
{
Assembly ass = AppDomain.CurrentDomain.GetAssemblies()
.SingleOrDefault(assembly => assembly.GetName().Name == "biblioTk2");
return File.Exists(SAVEFILE);
// Directory.GetCurrentDirectory() + @"\" + SAVEFILE
//Console.WriteLine(typeof(AmazonManager).Assembly);
//"file:\\"+pathToSaveFile
}
public void saveToFile(ObservableCollection<Book> books)
{
IFormatter formatter = new BinaryFormatter();
//Stream stream = new FileStream(SAVEFILE, FileMode.Create, FileAccess.Write, FileShare.None);
using (Stream stream=new FileStream(pathToSaveFile,FileMode.Create,FileAccess.Write,FileShare.None))
{
formatter.Serialize(stream, books.ToArray());
}
}
public void deleteSavedFile()
{
System.IO.File.Delete(pathToSaveFile);
}
public void loadFromFile(ObservableCollection<Book> books)
{
if (!saveFileExists())
return;
Book[] booksArray;
IFormatter formatterRestore=new BinaryFormatter();
using (Stream streamRestore =
new FileStream(pathToSaveFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
booksArray = (Book[])formatterRestore.Deserialize(streamRestore);
books.Clear();
foreach (var book in booksArray)
{
books.Add(book);
}
}
}
}
谢谢。
答案 0 :(得分:0)
如果要获取可执行文件的路径,可以使用以下命令:
Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);