我目前有一个FileHandler.cs
类,可以使用文件执行各种操作。在VisualStudio中运行的C#的默认目录是Project/bin/Debug
或Project/bin/release
,具体取决于您正在运行的目录。因此,在我的文件类的构造函数中,我执行以下操作:
System.IO.Directory.SetCurrentDirectory("..\\..\\TextFiles");
从bin或debug转到我拥有TextFiles
文件夹的主文件夹。这个问题是,下次我创建FileHandler
时,工作目录会增加2个级别TextFiles
不存在。
如何在不使用绝对路径的情况下再次将工作目录设置为默认bin / debug?
我可以使用几种黑客技术,例如将其设置为静态或为每个创建的FileHandler增加一个计数器,并将当前目录从第一级提升到每个级别,但这两种解决方案都相当混乱。
谢谢,Kalen
答案 0 :(得分:1)
我不会依赖默认目录。它可以根据应用程序的启动方式而改变。相反,您可以尝试检测可执行文件的位置并使用它来构造数据路径。像这样:
var exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
// or AppDomain.CurrentDomain.BaseDirectory, see http://stackoverflow.com/a/837501/3246555
var dataPath = Path.Combine(exePath, @"..\..\TextFiles");
//Directory.SetCurrentDirectory(dataPath);
此外,最好避免使用SetCurrentDirectory
并构建完整的文件路径:
var filePath = Path.Combile(dataPath, "MyFile.txt");