Какой самый простой способ получить каталог, в котором находится файл? Я использую это, чтобы установить рабочий каталог.
string filename = @"C:\MyDirectory\MyFile.bat";
В этом примере я должен получить «C: \ MyDirectory».
Какой самый простой способ получить каталог, в котором находится файл? Я использую это, чтобы установить рабочий каталог.
string filename = @"C:\MyDirectory\MyFile.bat";
В этом примере я должен получить «C: \ MyDirectory».
Ответы:
Если у вас определенно есть абсолютный путь, используйте Path.GetDirectoryName(path).
Если вы можете получить только относительное имя, используйте new FileInfo(path).Directory.FullName.
Обратите внимание, что Pathи FileInfoоба находятся в пространстве имен System.IO.
new FileInfo(path).Directory.FullNameдолжно работать в любом случае.
Вы можете использовать System.IO.Path.GetDirectory(filename)или превратить путь в FileInfo, и использовать FileInfo.Directory.
Если вы делаете другие вещи с этим путем, у них FileInfoмогут быть преимущества.
Если вы работаете с FileInfoобъектом, есть простой способ извлечь stringпредставление полного пути каталога через DirectoryNameсвойство.
Описание FileInfo.DirectoryNameнедвижимости через MSDN:
Получает строку, представляющую полный путь к каталогу.
Пример использования:
string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"
Ссылка на документацию MSDN .
Вы можете получить текущий путь к приложению, используя:
string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();
Удачи!
Вы можете использовать Path.GetFullPathдля большинства случаев. Но если вы хотите получить путь также, если имя файла относительно расположено, вы можете использовать следующий общий метод:
string GetPath(string filePath)
{
return Path.GetDirectoryName(Path.GetFullPath(filePath))
}
Например:
GetPath("C:\Temp\Filename.txt") возвращение "C:\Temp\"
GetPath("Filename.txt")вернуться current working directoryкак"C:\Temp\"
В моем случае мне нужно было найти имя каталога полного пути (каталога), поэтому я просто сделал:
var dirName = path.Split('\\').Last();
"C:\MyDirectory"а не MyDirectory. Совет использовать методы манипуляции со строками рискован, есть много ловушек, лучше использовать специальные Pathметоды.
Path.GetDirectoryName (Context.Parameters [ "assemblypath"])
Path.GetDirectoryNameупоминается во многих других ответах (включая принятый ответ)
@"C:\MyDirectory\MyFile.bat"