Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613

Как программно переименовать файл, убрав 5 последних символов

18.02.2015, 14:30. Показов 3414. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
необходимо переименовать файл, лежащий в папке С:\ren.
от имени файла необходимо убрать 5 последний символов. и оставить оставшиеся символы, как имя. Как это осуществить? заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.02.2015, 14:30
Ответы с готовыми решениями:

Как программно переименовать таблицу MSAccess
Как программно с помощью ADO переименовать таблицу MSAccess? :help:

Как программно переименовать процедуру в MDB базе
Как программно переименовать процедуру в MDB базе ?

Как программно переименовать процедуру в MDB базе
Как программно переименовать процедуру в MDB базе ?

19
26 / 18 / 8
Регистрация: 25.01.2015
Сообщений: 48
18.02.2015, 15:25
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim yourFile As String = "c:\ren\something.txt"
        Dim f As New System.IO.FileInfo(yourFile)
        yourFile = Microsoft.VisualBasic.Left(f.Name, f.Name.Length - 9) 'расширение точка и 5 символов=9
        yourFile = yourFile & Microsoft.VisualBasic.Right(f.Name, 4)
        'и потом
        f.CopyTo(f.DirectoryName & "\" & yourFile)
        f.Delete()
        'или лучше
        Microsoft.VisualBasic.Rename(f.FullName, f.DirectoryName & "\" & yourFile)
        'а можно и так
        My.Computer.FileSystem.RenameFile(f.FullName, f.DirectoryName & "\" & yourFile)
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 15:29  [ТС]
Иван Чолев, а если имя файла меняется изо дня в день, но имеет один и тот же формат?
н.р. сегодня из стороннего приложения выгрузился такой файл: 14022015_2321.txt, а завтра выгрузиться 22022015_2326.txt
0
26 / 18 / 8
Регистрация: 25.01.2015
Сообщений: 48
18.02.2015, 15:37
adb420,
получишь сегодня 14022015.txt а завтра 22022015.txt

если длина файла постоянна можно вместо:
Visual Basic
1
yourFile = Microsoft.VisualBasic.Left(f.Name, f.Name.Length - 9) 'расширение точка и 5 символов=9
короче
VB.NET
1
yourFile = Microsoft.VisualBasic.Left(f.Name, 8)
1
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.02.2015, 15:44
Лучший ответ Сообщение было отмечено adb420 как решение

Решение

VB.NET
1
2
3
4
        Dim F() As String = IO.Directory.GetFiles("C:\ren")
        For Each _F As String In F
            My.Computer.FileSystem.RenameFile(_F, IO.Path.GetFileNameWithoutExtension(_F).Substring(0, 5) & IO.Path.GetExtension(_F))
        Next
Добавлено через 4 минуты
Неправильно.
Так:
VB.NET
1
2
3
4
5
6
        Dim F() As String = IO.Directory.GetFiles("C:\ren")
        Dim Tmp As String
        For Each _F As String In F
            Tmp = IO.Path.GetFileNameWithoutExtension(_F)
            My.Computer.FileSystem.RenameFile(_F, Tmp.Substring(0, Tmp.Length - 5) & IO.Path.GetExtension(_F))
        Next
Добавлено через 3 минуты
Цитата Сообщение от adb420 Посмотреть сообщение
14022015_2321.txt
Если имя файла содержит нижнее подчеркивание, а количество цифр после него может быть не 4, а каждый раз разное, то можно обрезать имя файла по знаку "_"

VB.NET
1
2
3
4
5
6
        Dim F() As String = IO.Directory.GetFiles("C:\ren")
        Dim Tmp As String
        For Each _F As String In F
            Tmp = IO.Path.GetFileNameWithoutExtension(_F)
            My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
        Next
1
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 15:50  [ТС]
Памирыч, а если файла в папке не существует?, какую проверку можно сделать? с выводом сообщения, что файлов в папке нет, или они есть, но уже до этого были переименованны?
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.02.2015, 15:59
adb420, количество файлов в папке у нас уже записано.
тут:
VB.NET
1
F()
Это массив, просто проверьте его длину
VB.NET
1
2
If F.Length = 0 then
MsgBox "Папка пустая"
1
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
18.02.2015, 15:59
Лучший ответ Сообщение было отмечено adb420 как решение

Решение

годится?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim originpath As String ' начальный путь к файлу
        Dim resultpath As String ' конечный путь к файлу
        Dim removedcount As Integer = 5 ' количество удаляемых символов
 
        ' получаем путь к оригинальному файлу
        Dim ofd As New OpenFileDialog With {.Multiselect = False}
        If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
            originpath = ofd.FileName
        Else
            Exit Sub
        End If
 
        'небольшая проверка
        Dim fnlen As Integer = IO.Path.GetFileNameWithoutExtension(originpath).Length
        If Not fnlen > removedcount Or Not IO.File.Exists(originpath) Then
            MsgBox("Количество удаляемых символов больше количества символов в имени файла или файла не существует по указанному пути!", MsgBoxStyle.Exclamation)
            Exit Sub
        End If
 
 
        ' получаем расширение
        Dim ext As String = IO.Path.GetExtension(originpath)
        ' теперь удаляем последние символы в количестве removedcount до расширения
        resultpath = originpath.Remove(originpath.Length - ext.Length - removedcount, removedcount)
        ' ну и переименовываем
        My.Computer.FileSystem.RenameFile(originpath, resultpath)
    End Sub
1
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 16:12  [ТС]
Памирыч, а если файлы уже переименованы и лежат в этой папке, а юзер еще раз нажмет на кнопку то, программа вылетает. как сделать так что бы избежать этого.
0
26 / 18 / 8
Регистрация: 25.01.2015
Сообщений: 48
18.02.2015, 16:14
Если переименованные файлы находятся в той же папки тогда можно/нужно брат только не переименованные файлы (длина различная от 9) тогда код Памирыч-а можно модифицировать так:

VB.NET
1
2
3
4
5
6
7
8
9
Dim f = From files In IO.Directory.GetFiles("C:\ren") Where files.Length <> 9
        If f.Count = 0 Then
            MessageBox.Show("Нет файлов")
        End If
        Dim Tmp As String
        For Each _F As String In F
            Tmp = IO.Path.GetFileNameWithoutExtension(_F)
            My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
        Next
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 16:21  [ТС]
Иван Чолев, ругается на эту строчку
VB.NET
1
 My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
говорит, что не удалось завершить операцию, файл уже существует
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
18.02.2015, 16:28
Цитата Сообщение от adb420 Посмотреть сообщение
а если файлы уже переименованы и лежат в этой папке, а юзер еще раз нажмет на кнопку то, программа вылетает. как сделать так что бы избежать этого.
Зависит от того, какое исключение сгенерировал метод RenameFile (см. раздел исключения)
применение обработчика ошибок try...catch может помочь
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.02.2015, 16:40
Юпатов Дмитрий, там эксепшен существования файла

Еще так (закомментированная строка - альтернатива):
VB.NET
1
2
3
4
5
6
7
8
9
        Dim F() As String = IO.Directory.GetFiles("C:\ren")
        Dim Tmp As String
        For Each _F As String In F
            Tmp = IO.Path.GetFileNameWithoutExtension(_F)
            If Tmp.Split("_").Length > 1 Then
                'If Tmp.Contains("_") then
                My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
            End If
        Next
0
26 / 18 / 8
Регистрация: 25.01.2015
Сообщений: 48
18.02.2015, 16:47
Ну да длина нужно брат полная- переименований файл: c:\ren\14022015.txt- длина 19 символов или так:

VB.NET
1
 Dim f = From files In IO.Directory.GetFiles("C:\ren") Where files.Length <> 19
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
18.02.2015, 16:48
ну еще можно применить метод movefile вместо renamefile - у него есть перегрузка которая позволяет записать файл поверх существующего. Или обработать исключение и добавить к имени индекс (как это винда делает).
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 16:56  [ТС]
Памирыч, спасибо, а как проверить, если файлы уже переименовынны, и выдать сообщение, что файлы переименованны уже?
и еще, если в папке скажем есть переименованные уже файлы, а есть и не переименованные, то все равно выдает ошибку!
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.02.2015, 17:04
Цитата Сообщение от adb420 Посмотреть сообщение
если в папке скажем есть переименованные уже файлы, а есть и не переименованные, то все равно выдает ошибку!
Я проверял, у меня прога переименовывает только непереименованные файлы. Уже отредактированные она не трогает.
Цитата Сообщение от adb420 Посмотреть сообщение
как проверить, если файлы уже переименовынны
Если в их имени есть "_", значит, они еще не были обработаны.
В посте 13 эта строка закомментирована, и делает то же, что и строка выше - проверяет файл на наличие нижнего подчеркивания в имени.

А может, у Вас в файлах не только нижнее подчеркивание?
Может, покажете скрин папки, только чтоб имена было видно.
И код покажите
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 17:15  [ТС]
Памирыч,а вот собственно и код:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
 Dim F() As String = IO.Directory.GetFiles("C:\ren")
        Dim Tmp As String
        If F.Length = 0 Then
            MsgBox("Папка пустая" & " " & CheckBox2.Text, MsgBoxStyle.Information, "Info")
        End If
        For Each _F As String In F
            Tmp = IO.Path.GetFileNameWithoutExtension(_F)
            If Tmp.Split("_").Length > 1 Then
                'If Tmp.Contains("_") then
                My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
            End If
        Next
ругается на эту строчку
VB.NET
1
 My.Computer.FileSystem.RenameFile(_F, Tmp.Split("_")(0) & IO.Path.GetExtension(_F))
говорит, что "Не удалось завершить операцию: файл "C:\ren\16025088.txt" уже существует."
Миниатюры
Как программно переименовать файл, убрав 5 последних символов  
0
Почетный модератор
 Аватар для Памирыч
23251 / 9163 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
18.02.2015, 17:27
adb420, ну все верно. Вы переименовываете файл с "_84" на конце так, что он становится одноименным с уже имеющимся.
0
8 / 8 / 1
Регистрация: 09.10.2013
Сообщений: 613
18.02.2015, 17:39  [ТС]
Памирыч, ааа) всё, спасибо, разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2015, 17:39
Помогаю со студенческими работами здесь

Открыть текстовый файл и удалить 11 последних символов на каждой строке
Помогите пожалуйста. Нужно открыть текстовый файл и удалить 11 последних символов на каждой строке.

Дан текстовый файл f, содержащий 20 строк. Получить g исключая из i той строки f i последних символов
Дан текстовый файл f, содержащий 20 строк. Получить g исключая из i-той строки f i последних символов.

Как переименовать файлы и подкаталоги с заменой заданных символов?
Требуется решить такую задачу. Переименовать все файлы и подкаталоги, расположенные в заданном каталоге, так, что один заданный символ...

Как переименовать файл?
Как переименовать файл? пробовал не получается: ...

Как переименовать файл?
Скажите код. чтобы когда нажимали на чекбокс файл из определенной папки переименовался с &quot;Objects_Natural.pak&quot; в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru