在C#

时间:2018-10-12 09:28:25

标签: c# .net testing directory

我创建了一个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”

(这里的项目视图是Visual Studio):here

我认为这是一个很大的问题:启动应用程序和进行调试时,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);
                }
            }
        }
    }

谢谢。

1 个答案:

答案 0 :(得分:0)

如果要获取可执行文件的路径,可以使用以下命令:

Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);