|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Переименование файла (По формату)
Нужна помощь. Нужно переименовать файл определенного формата.
Естественно вы знаете про ф-цию: RenameFile(...), но проблема в том, что там переименуется файл с именем. Мне же необходимо переименовать файл определенного формата. Например tfg. В папке лежит файл abc.tfg, который надо переименовать допустим в get.ini. Дело в том что он должен находить не abc.tfg, а любой файл с форматом .tfg и только этот файл переименовывать. Этот файл в папке один с таким форматом, так-что глюков при переименовании не будет. очень нада!!! |
#2
|
|||
|
|||
Код:
var iFound : Integerl F : TSearchRec; begin iFound := FindFirst(path + '*.tfg',faAnyfile,F); if ifound = 0 Then begin // файл нашли, переименовываем. RenameFile(PChar(path + F.name),PChar(path + 'get.ini')); end; FindClose(F); end; то? ЗЫ. Это сработает на первом файла. Если файла 2, то переименует только первый. ЗЗЫ. формат функции RenameFile писал по памяти, м.б. там еще третий параметр есть, типа что делать при ошибке... не помню. |
#3
|
|||
|
|||
path
че такое path ?
почему то ошибку пишет при компиляции |
#4
|
||||
|
||||
Это путь. Вообще как я понимаю строковая переменная. Получить ее можно так.
Код:
Var path:string; GetDir(0,path); |
#5
|
|||
|
|||
Правильно. это путь.
Если ты смотришь рядом с самой программой, то можно его получить так: Код:
var path : string; begin path := ExtractFilePath(Application.ExeName); |
#6
|
|||
|
|||
спасибо
Спасибо вам, я думаю поможет....
Хотя файл не копируется.. почемуто ничего не происходит.. но я разберусь.. |
#7
|
||||
|
||||
Код:
var searchResult : TSearchRec; SearchDir: String; FName:String; I:byte; begin SearchDir:=ExtractFileDir(Application.ExeName)+'\Files\'; if FindFirst(PlugDir+'*.tgf', faAnyFile, searchResult) = 0 then begin repeat FName:=searchResult.Name; I:=Pos(Fname,'.'); Delete(Fname,I+1,3); Fname:=FName:='ini'; RenameFile(PChar(SearchDir + SearchResult.name),PChar(SearchDir + FName)); until FindNext(searchResult) <> 0; FindClose(searchResult); end; end; Хорошо написанная программа не требует документации ICQ 9-184-668. |
#8
|
|||
|
|||
!
Спасибо конечно, но теперь у меня есть еще ряд вопросов.
Как определить, есть ли файл такого формата или нет? Если есть то выдается диалоговое окно ( ShowMessage() ) и как копировать файл тоже определенного формата. Не выходит, хотя я и подставлял все значения правильно! Это сильно необходимо! p.s. пишите var и модули которые надо использовать, плз.. Заранее спасибо! |
#9
|
||||
|
||||
Код:
Uses Windows,SysUtils,Classes; var searchResult : TSearchRec; SearchDir: String; FName:String; I:byte; begin SearchDir:=ExtractFileDir(Application.ExeName)+'\Files\'; if FindFirst(PlugDir+'*.tgf', faAnyFile, searchResult) = 0 then //если не равно 0, тогда файлы, удовлетворяющие критерию поиска НЕ найдены begin repeat FName:=searchResult.Name; I:=Pos(Fname,'.'); Delete(Fname,I+1,3); Fname:=FName:='ini'; RenameFile(PChar(SearchDir + SearchResult.name),PChar(SearchDir + FName)); until FindNext(searchResult) <> 0; FindClose(searchResult); end; end; Если надо копировать файлы, тогда используй функцию CopyFile(ExistFile:PChar;TargetFile:PChar):boolean ; Хорошо написанная программа не требует документации ICQ 9-184-668. |
#10
|
|||
|
|||
хм..
Как мне в CopyFile подставить Edit.Text ???
Например стандартно выглядит CopyFile(PChar(Edit1.Text), PChar(Edit2.Text), true); Как подсоеденить в твой код? скажи пожалуйста з.ы. дело в том что этот файл используется программой, а его необходимо переименовать. Придется его копировать.. еще одно З.Ы - Файл удаляется как программа закрывается, и создается после открытия программы. Мне нужно вовремя поменять формат файла пока та программа запущена чтобы файл не пропал. Вот для чего нужно это все.. Последний раз редактировалось ApplicatiOn, 06.05.2008 в 16:36. |
#11
|
|||
|
|||
CopyFile(...,PChar(Edit1.Text),...) - не пробывал?
А по поводу собственно копирования файла надо делать примерно так. Кидаешь на форму таймер, настраиваешь его, напримерЮ на 5000 мсек. В его событии OnTimer: 1. Отключаешь таймер. 2. Проверяешь папку (FindFirst/FindNext/FindClose) и отписываешь все нужные тебе файлы. 3. Включаешь таймер обратно. В последствии еще можно приделать мониторинг процессов, что бы закрываться вместе с соотв. программой. Или наоборот - запускаться будет твоя прога, а она уже стартанет основную и по ее закрытию тоже вырубится (см. CreateProcess/CreateProcessEx - там надо поймать хэндл процесса и смотреть, что он жив - как умер, значит и прога закрылась). |
#12
|
|||
|
|||
Всем добрый день!
Наверное, нельзя было поднимать старую тему, но здесь есть кусок кода, который у меня не совсем правильно работает. А именно, некоторые файлы переименовываются по несколько раз.... Вот немного изменённый код: Код:
var searchResult : TSearchRec; begin if FindFirst('*.*i*', faAnyFile, searchResult) = 0 then begin repeat RenameFile(SearchResult.name,shiftre(SearchResult.name)); until FindNext(searchResult) <> 0; FindClose(searchResult); end; end; shiftre - это функция, которая просто перемещает последние 4 символа в начало (TestEnRu.dic --> EnRuTest.dic). В ней ошибок вроде бы нет, но всё же вот она: Код:
function shiftre(inp:string):string; var te:string ; begin if inp[Length(inp)-3]='.' then te:=midstr(inp,Length(inp)-7,4)+leftstr(inp,Length(inp)-8)+rightstr(inp,4) else if inp[Length(inp)-4]='.' then te:=midstr(inp,Length(inp)-8,4)+leftstr(inp,Length(inp)-9)+rightstr(inp,5); result:=te; end; По поводу того, что код какой-то левый - ничего страшного, меня всё устраивает. Я не программист, и даже не начинающий, просто когда-то в школе был паскаль, вот и подумал, что будет проще поковыряться в прошлом, чтоб переименовать ровно 128 файлов. Хотя, думаю, я бы уже в ручную всё переименовал, но уже даже интересно стало, что не так. Надеюсь, такой пост никого не обременяет писать в ответ. Да, и заранее спасибо! Последний раз редактировалось varied, 21.09.2009 в 19:20. |