Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.05.2008, 19:47
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию Переименование файла (По формату)

Нужна помощь. Нужно переименовать файл определенного формата.

Естественно вы знаете про ф-цию: RenameFile(...), но проблема в том, что там переименуется файл с именем. Мне же необходимо переименовать файл определенного формата.

Например tfg. В папке лежит файл abc.tfg, который надо переименовать допустим в get.ini. Дело в том что он должен находить не abc.tfg, а любой файл с форматом .tfg и только этот файл переименовывать.

Этот файл в папке один с таким форматом, так-что глюков при переименовании не будет.

очень нада!!!
Ответить с цитированием
  #2  
Старый 05.05.2008, 19:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
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  
Старый 05.05.2008, 19:58
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию path

че такое path ?

почему то ошибку пишет при компиляции
Ответить с цитированием
  #4  
Старый 05.05.2008, 20:53
Аватар для Professor Farnsworth
Professor Farnsworth Professor Farnsworth вне форума
Прохожий
 
Регистрация: 19.04.2008
Сообщения: 42
Репутация: 10
По умолчанию

Это путь. Вообще как я понимаю строковая переменная. Получить ее можно так.
Код:
Var path:string;

GetDir(0,path);
Ответить с цитированием
  #5  
Старый 05.05.2008, 21:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Правильно. это путь.
Если ты смотришь рядом с самой программой, то можно его получить так:

Код:
var
  path : string;
begin
  path := ExtractFilePath(Application.ExeName);
Ответить с цитированием
  #6  
Старый 05.05.2008, 23:12
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию спасибо

Спасибо вам, я думаю поможет....


Хотя файл не копируется.. почемуто ничего не происходит..

но я разберусь..
Ответить с цитированием
  #7  
Старый 06.05.2008, 09:52
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Код:
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  
Старый 06.05.2008, 11:01
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию !

Спасибо конечно, но теперь у меня есть еще ряд вопросов.


Как определить, есть ли файл такого формата или нет? Если есть то выдается диалоговое окно ( ShowMessage() ) и как копировать файл тоже определенного формата. Не выходит, хотя я и подставлял все значения правильно!

Это сильно необходимо!

p.s. пишите var и модули которые надо использовать, плз..

Заранее спасибо!
Ответить с цитированием
  #9  
Старый 06.05.2008, 14:17
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Код:
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  
Старый 06.05.2008, 16:20
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию хм..

Как мне в CopyFile подставить Edit.Text ???

Например стандартно выглядит CopyFile(PChar(Edit1.Text), PChar(Edit2.Text), true);

Как подсоеденить в твой код? скажи пожалуйста


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

еще одно З.Ы - Файл удаляется как программа закрывается, и создается после открытия программы. Мне нужно вовремя поменять формат файла пока та программа запущена чтобы файл не пропал. Вот для чего нужно это все..

Последний раз редактировалось ApplicatiOn, 06.05.2008 в 16:36.
Ответить с цитированием
  #11  
Старый 06.05.2008, 20:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

CopyFile(...,PChar(Edit1.Text),...) - не пробывал?

А по поводу собственно копирования файла надо делать примерно так.
Кидаешь на форму таймер, настраиваешь его, напримерЮ на 5000 мсек.
В его событии OnTimer:
1. Отключаешь таймер.
2. Проверяешь папку (FindFirst/FindNext/FindClose) и отписываешь все нужные тебе файлы.
3. Включаешь таймер обратно.

В последствии еще можно приделать мониторинг процессов, что бы закрываться вместе с соотв. программой. Или наоборот - запускаться будет твоя прога, а она уже стартанет основную и по ее закрытию тоже вырубится (см. CreateProcess/CreateProcessEx - там надо поймать хэндл процесса и смотреть, что он жив - как умер, значит и прога закрылась).
Ответить с цитированием
  #12  
Старый 21.09.2009, 19:18
varied varied вне форума
Прохожий
 
Регистрация: 21.09.2009
Сообщения: 1
Репутация: 10
Радость

Всем добрый день!

Наверное, нельзя было поднимать старую тему, но здесь есть кусок кода, который у меня не совсем правильно работает. А именно, некоторые файлы переименовываются по несколько раз....

Вот немного изменённый код:

Код:
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;
Вторая проверка для файлов с 4-ёх символьным расширением.

По поводу того, что код какой-то левый - ничего страшного, меня всё устраивает. Я не программист, и даже не начинающий, просто когда-то в школе был паскаль, вот и подумал, что будет проще поковыряться в прошлом, чтоб переименовать ровно 128 файлов. Хотя, думаю, я бы уже в ручную всё переименовал, но уже даже интересно стало, что не так.

Надеюсь, такой пост никого не обременяет писать в ответ.

Да, и заранее спасибо!

Последний раз редактировалось varied, 21.09.2009 в 19:20.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter