Получить полное имя файла без расширения

jkrnd

Задача: получить полное имя файла и заменить в нём (не добавить) расширение Делаю это так:
Dim sFName As String = IO.Path.Combine(Application.StartupPath, "runapp.ini") 'исходное полное имя
MsgBox(IO.Path.Combine(FileIO.FileSystem.GetFileInfo(sFName).DirectoryName, "runapp.tmp")) 'то же самое, но с другим расширением
Но ведь существует ряд функций работающих в этом направлении:
MsgBox(FileIO.FileSystem.GetName(sFName))                         'получить короткое имя файла (без пути)
MsgBox(FileIO.FileSystem.GetFileInfo(sFName).FullName)         'получить полное имя файла
MsgBox(FileIO.FileSystem.GetFileInfo(sFName).DirectoryName) 'получить полный путь к файлу (без имени)
MsgBox(FileIO.FileSystem.GetFileInfo(sFName).Extension)         'получить только расширение файла
Так почему же нет функции "Получить полное имя файла без расширения"? Или она всё-таки есть? Просьба при ответе не употреблять функции работы со строками (InStr и т.д.) интересуют "родные" фунции .NET для работы с файлами (именами файлов)
13 ответов

jkrnd

Или она всё-таки есть?
Есть. И она прямо так и называется GetFileNameWithoutExtension
MsgBox(IO.Path.GetFileNameWithoutExtension("file"))


jkrnd

Памирыч, это только вернет имя без пути и расширения, а нужно менять расширение.
Imports System
Imports System.IO
 
Module X
  Sub Main(ByVal args As String())
    For Each arg As String In args
      If File.Exists(arg) Then
        Console.WriteLine(Path.ChangeExtension(Path.GetFullPath(arg), ".myextension"))
      End If
    Next
  End Sub
End Module


jkrnd

greg zakharov, нужно получить не полный путь а только имя файла и заменить в нем разширение... Это все и так понятно если знаем имя
MsgBox(IO.Path.GetFileNameWithoutExtension("Путь") & ".NewExtention")


jkrnd

Yury Komar, читайте внимательней:
Задача: получить полное имя файла и заменить в нём (не добавить) расширение


jkrnd

Вариаций много на этот счет. Тут уже как кому нравится...


jkrnd

        Dim _File As String = "C:\Users\1\Desktop\Новый текстовый документ.txt"
        IO.File.Move(_File, Path.ChangeExtension(_File, ".myextension"))


jkrnd

greg zakharov, не соглашусь с вами...


jkrnd

Yury Komar, не надо с ним соглашаться или не соглашаться, подождем автора темы


jkrnd

Памирыч, ок... так и поступим


jkrnd

Это именно то что нужно!
MsgBox(IO.Path.ChangeExtension(IO.Path.GetFullPath(sFName), ".tmp"))
а
MsgBox(IO.Path.GetFileNameWithoutExtension(sFName) & ".tmp")
даёт имя не только без расширения, но и без пути!ChangeExtension выполняет поставленную задачу (по замене расширения) полностью! Огромное спасибо! Но вопрос не только в этом. Вдруг в каком-нибудь случае ещё понадобится нечто подобное. Так почему же нет функции "Получить полное имя файла без расширения"? Или она всё-таки есть?


jkrnd

jkrnd, а вы посмотрите какие функции там есть... я помню была. Если не там, тогда в
IO.Directory.....


jkrnd

jkrnd, готовой функции не встречал, ибо у меня Framework 3.5, в старших версиях возможно уже есть.Чтобы получить полный путь без расширения, скачем все на той же лошади
        Dim fName As String = Application.ExecutablePath
        MsgBox(IO.Path.ChangeExtension(fName, "")) 'Вернет с точкой
        MsgBox(IO.Path.ChangeExtension(fName, Nothing)) 'Вернет без точки


jkrnd

в IO.Directory проверил. Ничего подобного не нашёл.А вот это уже именно то что нужно в чистом виде:
MsgBox(IO.Path.ChangeExtension(fName, "")) 'Вернет с точкой
Ответ получен исчерпывающий. Всем огромное спасибо.