Самый простой способ состоит в использовании Substring()
basePath = OpenFileDialog1.InitialDirectory
If basePath = "" Then
basePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
End If
If path.StartsWith(basePath) Then
path = path.Substring(basePath.Length + 1)
End If
Примечание: + 1
для длины пути сепаратора.
Этот подход имеет свои ограничения, например, что, если ваш базовый путь содержит косые черты /
в качестве разделителей (которые действительны в Windows) или что, если это UNC-путь. Самый простой способ - обеспечить, чтобы ваш базовый путь всегда был совместим с пути, возвращаемым из диалогового окна файла.
На самом деле, у меня есть решение, которое делает эту задачу тривиальной путем разделения пути на компоненты, его также правильно обрабатывать как /
и \
, также обработку абсолютные и относительные пути, стандартные пути и пути UNC, но у него есть 1000+ линии как библиотеки. Я не готов поделиться им. Я хотел сказать, что вам приходится иметь дело с этим сложным способом (как я уже упоминал) или просто использовать какое-то простое ограниченное «решение», как я писал в первой части ответа.
Посмотрите на класс Path. https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx У этого есть методы, чтобы получить имена файлов и т. д. – Jeremy
Что вы подразумеваете под «базовой папкой», , Вы имеете в виду все, кроме последнего каталога в пути, а также имя файла. Другими словами, если патч «C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ filename.ext», вы хотите сохранить «d6 \ filename.ext»? – Blackwood
@ Блэквуд см. Мое редактирование. Я забыл добавить эту часть – Adriaan