IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> FPC, удаление директорий и файлов, было: Помогите с процедурой на FPC!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Процедура удаляет папку со всеми файлами и подпапками.


procedure DELE (fd: string);
var
s: searchrec;
f: file;
delf,delfiles: string;

function STAT (fd: string): string;
var s: searchrec;
begin
stat:='';
findfirst(fd,anyfile,s); if doserror<>0 then exit;
if s.attr=VolumeID then findnext(s); if doserror<>0 then exit;
if (s.attr>=16)and(s.attr<=23) or (s.attr>=48)and(s.attr<=55)
then stat:='D' else stat:='F';
end;

begin
if stat(fd)='F' then begin assign(f,fd); setfattr(f,0); erase(f) end;
if stat(fd)='D' then
begin
delfiles:=fd+'\*.*';
findfirst(delfiles,anyfile,s);
while doserror=0 do
begin
delf:=fd+'\'+s.name;
if (s.name<>'.')and(s.name<>'..')and(s.name<>'') then
begin
if stat(delf)='F' then dele(delf);
if stat(delf)='D' then
begin
{$I-}rmdir(delf);{$I+}
if ioresult=5 then dele(delf)
end;
end;
findnext(s);
end;
rmdir(fd);
end;
end;



На TP работает, а вот на FPC как-то криво работает. Что-то удаляет,а что-то нет. Если указать просто пустой каталог, то даже его не удаляет.
В чем проблема?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
так выходит ошибка: Incompatible types: got "untyped" expected "LongInt"
Как "так"? Почему у меня не выходит?

uses sysutils;

procedure DELE (fd: string);

function stat (fd : string) : char; // Char - для того, чтобы можно было использовать в Case
var s: tsearchrec;
begin
stat:=#0;
if findfirst(fd,faanyfile,s) <> 0 then exit;

if s.attr = faVolumeID then
if findnext(s) <> 0 then exit;

if (s.attr>=16) and (s.attr<=23) or
(s.attr>=48) and (s.attr<=55)
then
stat:='D'
else
stat:='F';
end;

var
s : tsearchrec;
f : file;
delf, delfiles : string;

begin
case stat(fd) of
'F' : begin
// assign(f,fd); setfattr(f,0); erase(f)
// используется filesetattr из SysUtils вместо досовского setfattr
end;
'D' : begin
delfiles:=fd+'\*.*';
if findfirst(delfiles,faanyfile,s) <> 0 then
repeat
delf:=fd+'\'+s.name;
if (s.name<>'.')and(s.name<>'..')and(s.name<>'') then
begin
case stat(delf) of
'F': dele(delf);
'D': begin
{$I-} rmdir(delf); {$I+}
if ioresult = 5 then dele(delf)
end;
end; // case
end;
until findnext(s) <> 0;
findclose(s);

rmdir(fd);
end;
end; // case;
end;

begin
// ...
end.


Ничего не менял в логике работы (хотя тут тоже есть, на что обратить внимание), просто добавил нужный модуль и поменял цикл. Компиляцию проходит успешно. FPC 2.4.4 ...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Билли Боб   FPC, удаление директорий и файлов   19.08.2011 2:54
Lapp   На TP работает, а вот на FPC как-то криво работает…   19.08.2011 9:15
Lapp   Тему переношу в раздел "32-битные компиляторы…   19.08.2011 15:56
Билли Боб   Благодарю! C FindClose все отлично работает, и…   20.08.2011 4:21
IUnknown   Билли Боб, не знаю, сделал ты это или нет, но при …   20.08.2011 13:46
Билли Боб   так выходит ошибка: Incompatible types: got …   20.08.2011 21:56
IUnknown   Как "так"? Почему у меня не выходит? us…   20.08.2011 22:27
Билли Боб   Оказывается надо было убрать модуль DOS после USES…   20.08.2011 23:04
Билли Боб   Почему программа зависает, когда я пишу: uses sysu…   21.08.2011 2:07
IUnknown   Хм... Интересно. Сама среда разработки зависает? А…   21.08.2011 2:33
Билли Боб   Не знаю, как это получилось, но еще зависало когда…   21.08.2011 2:41
Билли Боб   Как сделать курсор снова маленьким? а то после cur…   21.08.2011 3:48
Lapp   Как сделать курсор снова маленьким? а то после cur…   21.08.2011 15:27


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 11.06.2024 22:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name