Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2008, 21:30   #1
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию Проблемы при удалении файлов

Нашёл на этом форуме такой код для удаления файлов в папке

Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Masks;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles('C:\Test\*planeta*.txt');
end;

Procedure DeleteFiles(Path: string);
var
  Mask: string;
  SearchRec: TSearchRec;
  FindResult: Integer;
  List: TStringList;
  i: Integer;
begin
 Mask := ExtractFileName(Path);
  if Mask = '' then
    Mask := '*.*';
  Path := ExtractFilePath(Path);
  if Path = '' then
    Path := IncludeTrailingBackslash(GetCurrentDir);
  List := TStringList.Create;
  try
    FindResult := FindFirst(Path + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if ((Attr and faDirectory) = 0) and MatchesMask(Name, Mask) then
            List.Add(Name);
          FindResult := FindNext(SearchRec);
        end;
      for i := 0 to List.Count - 1 do
        <SPAN class=highlight>DeleteFile</SPAN>(Path + List[i]);
    finally
      FindClose(SearchRec);
    end;
  finally
    List.Free;
  end;
Пытаюсь удалить все файла в папке 'C:\Test\*planeta*.txt', но выскакивают вот такие ошибки

[Error] Unit1.pas(28): Undeclared identifier: 'DeleteFiles'
[Warning] Unit1.pas(44): Symbol 'IncludeTrailingBackslash' is specific to a platform
[Error] Unit1.pas(57): Statement expected but '<' found
[Error] Unit1.pas(60): EXCEPT or FINALLY expected
[Error] Unit1.pas(61): 'END' expected but 'FINALLY' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Что не так? Или подскажите, как можно удалить файлы, которые содержат в своём названии текст *planeta* в папке C:\Test ?

P.S. сегодня первый день в дельфи

Последний раз редактировалось Pavel55; 09.01.2008 в 21:34.
Pavel55 вне форума Ответить с цитированием
Старый 09.01.2008, 22:10   #2
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

1. Это ведь только часть кода. Здесь предполагается, что есть еще форма, на которой лежит по крайней мере одна кнопка и ей назначен обработчик Button1Click. У вас есть эта форма с кнопкой?

2. [Error] Unit1.pas(28): Undeclared identifier: 'DeleteFiles' означает, что процедура DeleteFiles должна быть либо размещена перед Button1Click, либо предварительно описана как процедура в секции interface.

3. [Warning] Unit1.pas(44): Symbol 'IncludeTrailingBackslash' is specific to a platform - в принципе, ничего страшного. Наличие сообщения будет зависеть от версии Delphi и кое-каких опций.

4. [Error] Unit1.pas(57): Statement expected but '<' found - вероятно при копировании текст вставился в виде <SPAN class=highlight>DeleteFile</SPAN>(Path + List[i]); - надо написать просто DeleteFile(Path + List[i]);
Jeni вне форума Ответить с цитированием
Старый 09.01.2008, 22:43   #3
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

1) Да, конечно, форма с кнопкой есть и обработчик кнопки создан (я программирую на VBA )
2) а как её нужно описать как процедуру?
так?

Код:
type
    procedure DeleteFiles();
3) я так и понял, что это будет работать только под Windows
4) спасибо, я что-то и не понял сперва, что это тэги с форума)

Теперь у меня такие ошибки

[Warning] Unit1.pas(41): Symbol 'IncludeTrailingBackslash' is specific to a platform
[Error] Unit1.pas(66): Too many actual parameters (это строка DeleteFiles('C:\Test\*.*');)
[Error] Unit1.pas(13): Unsatisfied forward or external declaration: 'TForm1.DeleteFiles' (это строка procedure DeleteFiles(); )
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

Последний раз редактировалось Pavel55; 09.01.2008 в 22:45.
Pavel55 вне форума Ответить с цитированием
Старый 09.01.2008, 22:56   #4
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от Pavel55 Посмотреть сообщение
1) Да, конечно, форма с кнопкой есть и обработчик кнопки создан (я программирую на VBA )
VBA ? Ты переписываешь код с делфи на бейсик или просто пытаешься тупо запустить на бейсике код от делфи путём копирования кода?

ЗЫ: Напомнило мне случай когда чел вставил код программы написанной на Си в VB и спрашивал почему всё красное и почему некомпилится...


Цитата:
2) а как её нужно описать как процедуру?


Procedure DeleteFiles(Path: string);
.......
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFiles('C:\Test\*planeta*.txt' );
end;


Должно быть в такой последовательности...
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Последний раз редактировалось Карась; 09.01.2008 в 22:59.
Карась вне форума Ответить с цитированием
Старый 09.01.2008, 23:08   #5
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Я про VBA сказал, имея ввиду, что я знаю, что у меня в проекте должна быть форма с кнопкой). Но сейчас пытаюсь понять азы Дельфи)

Вот весь мой код. Но не работает

Код:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Masks;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure DeleteFiles();
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


Procedure DeleteFiles(Path: string);
var
  Mask: string;
  SearchRec: TSearchRec;
  FindResult: Integer;
  List: TStringList;
  i: Integer;
begin
 Mask := ExtractFileName(Path);
  if Mask = '' then
    Mask := '*.*';
  Path := ExtractFilePath(Path);
  if Path = '' then
    Path := IncludeTrailingBackslash(GetCurrentDir);
  List := TStringList.Create;
  try
    FindResult := FindFirst(Path + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if ((Attr and faDirectory) = 0) and MatchesMask(Name, Mask) then
            List.Add(Name);
          FindResult := FindNext(SearchRec);
        end;
      for i := 0 to List.Count - 1 do
        DeleteFile(Path + List[i]);
    finally
      FindClose(SearchRec);
    end;
  finally
    List.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  DeleteFiles('C:\Test\*planeta*.txt');
end;

end.
Pavel55 вне форума Ответить с цитированием
Старый 09.01.2008, 23:33   #6
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

1. Там, где идет объявление класса, нужно вместо procedure DeleteFiles(); записать procedure DeleteFiles(Path: string);

2. Не обязательно объявлять DeleteFiles методом класса и необязательно записывать эту процедуру перед другими процедурами/функциями. Просто достаточно объявить ее в секции interface. Напрмер:
Код:
interface

uses ...

  TForm1 = class(TForm)  
  ...
  end;  

Procedure DeleteFiles(Path: string);

implementation  
...
Jeni вне форума Ответить с цитированием
Старый 09.01.2008, 23:44   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Пардон, что вмешиваюсь.
procedure DeleteFiles();
Procedure DeleteFiles(Path: string);
1. Описания должны быть одинаковыми (параметры);
2. Если описали процедуру заранее, в тексте программы необходимо указать принадлежность ее к форме, так же, как и
procedure TForm1.Button1Click(Sender: TObject);
mihali4 вне форума Ответить с цитированием
Старый 10.01.2008, 00:45   #8
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Уф, большое вам спасибо ) всё заработало
Я могу написать эту прогу на VB(A) или сделать скрипт, но хочется перейти на Delphi. VBA для меня становится мал, хочется чего-то большего).

P.S. Смысл проги. На одном форуме, посвящённому VBA, происходит какой-то глюк. Заходишь в тему, отписываешься там, закрываешь форум, при повторном просмотре некоторых тем, через какое-то время, некоторые темы на форуме не открывываются и появляется пустая белая страница с надписью

502 Bad Gateway
-------------------------------------------------------
nginx/0.3.35

Помогает очистка Cookies. Вот я и подумал написать прогу, которая бы очищала кукисы этого сайта.

Последний раз редактировалось Pavel55; 10.01.2008 в 00:55.
Pavel55 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с WIN+D Altera Общие вопросы Delphi 4 15.08.2008 15:55
Ошибка при удалении... JRcoker Общие вопросы Delphi 8 29.07.2008 22:53
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04
Проблемы с DLL Дмитрий2006 Общие вопросы C/C++ 5 15.10.2007 12:43