一种选择是做System.IO.Directory.GetParent()几次。 有没有从执行的程序集驻留在那里旅行几个文件夹了一个更优雅的方式?
我试图做的是找到驻留在一个文件夹的应用程序文件夹上面的文本文件。 但大会本身就是垃圾桶,这是深藏在应用程序文件夹几个文件夹内。
一种选择是做System.IO.Directory.GetParent()几次。 有没有从执行的程序集驻留在那里旅行几个文件夹了一个更优雅的方式?
我试图做的是找到驻留在一个文件夹的应用程序文件夹上面的文本文件。 但大会本身就是垃圾桶,这是深藏在应用程序文件夹几个文件夹内。
其他简单的方法是这样:
string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));
注意这又向上两级。 其结果将是: newPath = @"C:\Folder1\Folder2\";
如果c:\ folder1中\文件夹2 \ folder3 \ BIN是那么路径下面的代码将返回箱文件夹的路径基本文件夹
//string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());
string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString();
即C:\ folder1中\文件夹2 \ folder3
如果你想文件夹2路径,你可以得到由目录
string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();
那么你会得到路径为c:\文件夹1 \文件夹2 \
这是为我工作最好的:
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));
获得“正确”的道路是没有问题的,加上“../”显然这样做,但在此之后,给定的字符串是不可用的,因为它只是在末尾添加了“../”。 与周围Path.GetFullPath()
会给你的绝对路径,使其可用。
您可以使用..\path
去一个级别, ..\..\path
从路径走了两个级别。
您可以使用Path
类了。
C#类路径
下面的方法搜索与应用程序的启动路径文件(* .exe文件)开头的文件。 如果没有找到该文件,则父文件夹进行搜索,直到找到该文件或文件夹的根已经达到。 null
如果没有找到该文件返回。
public static FileInfo FindApplicationFile(string fileName)
{
string startPath = Path.Combine(Application.StartupPath, fileName);
FileInfo file = new FileInfo(startPath);
while (!file.Exists) {
if (file.Directory.Parent == null) {
return null;
}
DirectoryInfo parentDir = file.Directory.Parent;
file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
}
return file;
}
注: Application.StartupPath
通常是在WinForms的应用,但它在控制台应用程序的工作原理为好; 但是,你必须设置为参考System.Windows.Forms
组装。 您可以替换Application.StartupPath
通过
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
如果你喜欢。
这可能有助于
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
// file found
}
也许,如果你想声明的级别数,并把它变成一个功能,你可以使用函数?
private String GetParents(Int32 noOfLevels, String currentpath)
{
String path = "";
for(int i=0; i< noOfLevels; i++)
{
path += @"..\";
}
path += currentpath;
return path;
}
你可以把它像这样:
String path = this.GetParents(4, currentpath);
如果你知道你要浏览的文件夹,找到它的索引,然后串。
var ind = Directory.GetCurrentDirectory().ToString().IndexOf("Folderame");
string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);
我有一些虚拟目录,我不能使用目录的方法。 所以,我做对于那些有兴趣的简单分割/结合功能。 虽然不是安全的。
var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());
所以,如果你想移动4,你只需要改变的1
至4
并添加一些检查,以避免例外。