Какой самый простой способ получить каталог, в котором находится файл? Я использую это, чтобы установить рабочий каталог.
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"