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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с директориями и файлами
сообщение
Сообщение #1


Бывалый
***

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

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


Здравствуйте! У меня очень легкая программа, но я не могу понять где в моем коде ошибка. Нужно найти все директивы и файлы и записать их в разных созданных файлах. Оно мне ничего не пишет. Что делать?
Исходный код

program files;
uses dos;
type
str79=string[79];
procedure find(var f,f1:text;mask:str79;attr:byte;S:searchRec);
begin
Findfirst('*.*',AnyFile,S);
while DosError=0 do
begin
if S.attr=$10 then
begin
writeln(f,S.name);
FindNext(s);
end
else
if S.attr=$3F then
writeln(f1,S.name,'-',s.size/1024:6:2)
end;
end;
var
flname:string[20];
f,f1:text;
pathstr:string[20];
begin
writeln('Vvedite put:');
readln(pathstr);
writeln('Vvedite imya 1 fila.');
readln(flname);
writeln('Vvedite imya 2 fila.');
readln(flname);
assign(f,flname);
assign(f1,flname);
rewrite(f);
rewrite(f1);



end.


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

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Э... нет, что-то тут нетак...
начнем с того,что
Код
rewrite(f);
  rewrite(f1);

Сотрет файлы найденные и создаст заново...

+ процедура find какая-то страшная...smile.gif пробежал ее взгядоми что-тодумаю - а что вы этимхотели сказать?
можете дать задание?
ктати, что за директивы? может директории?

Цитата
Нужно найти все директивы и файлы и записать их в разных созданных файлах.

дамаю задание такое:
Цитата
Найти все директории и их именазаписать в 1 файл.
Найти все файлы и имена записать в 2 файл.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

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

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


Да, да вы правы. Посто у меня после 5 пары голова уже не варит и все путаю. Извините. Ну так мы разве не используем rewrite когла хотим что-нибудь записать в файл?

А еще через черточку записать размеры файлов в кб.


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

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






setare
И еще один вопрос: Нужно найти все файлы и директории только в одной папке? Или во всех ее поддиректориях? Тогда без рекурсии не обойтись...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

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

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


Вот точное задание: Нужно создать два файла. В один записать все поддиректории из указанной директории и в другой все файлы из этой же указзаной директории и указать их размер. Путь надо вводить с клавиатуры.


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

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Код
uses dos;

var
 f_files, f_dirs: text;

Procedure ScanDir(Dir:string);
var s_Rec:SearchRec;
begin
 FindFirst(Dir+'*.*', AnyFile, s_rec);
 while doserror = 0 do begin
   { если найдена директория "." или ".." - ничего не делать }
   if (s_Rec.name='.') or (s_rec.name='..') then
   else

     { если найдена другая директория }
     if (s_Rec.Attr and Directory) = directory then
       writeln(f_dirs, Dir+s_Rec.name)
     else
       { Значит, нашли файл }
       writeln(f_files, Dir+s_rec.name,' - ',s_rec.size/1024:6:2);

   FindNext(s_Rec);
 end
end;

Var S: string;
begin
 assign(f_files, 'first.txt'); rewrite(f_files);
 assign(f_dirs, 'second.txt'); rewrite(f_dirs);

 { здесь - ввод пути в переменную S }
 ScanDir(S);

 close(f_dirs);
 close(f_files);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

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

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


Цитата
мы разве не используем rewrite когла хотим что-нибудь записать в файл?

:nono:
reset , rewrite и append используется для открытия файла для чтения или записи .

reset - открывает для чтения и записи существующий файл
append - открывает только для записи существующий файл
rewrite - создаёт новый файл и открывает его для чтения и записи

а уже после открытия файла можно читать или записывать в него используя
write/writeln(f,text) , read/readln(f) и (blockwrite , blockread для блочных файлов)

FAQ по файлам переписывать сюда зачем?

Сообщение отредактировано: volvo -


--------------------
Двадцать пятый час в сутках может появиться всего лишь из-за небольшой ошибки в программе.
Чтобы не воспользоваться сумасшедшими возможностями, нужно быть идиотом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Бывалый
***

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

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


а можно там где мы распечатываем файлы написать через черту так:
writeln(f_files, Dir+s_rec.name,'-',size/1024:6:2); при size:=longint?

А извините, но нельзя ли эту программу написать используя аттрибуты? Пготому что как то сложное решение получилось. С аттрибутами разве не проще? Просто я не очень понимаю то, что вы написали.


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

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Я исправил... Причем размер стоит брать только для файлов, из той же структуры s_rec

Цитата
А извините, но нельзя ли эту программу написать используя аттрибуты?

А, извините, что Вам легче сказать с первого взгляда, что такое $10 или Directory? $3F или AnyFile? Не нужно переходить на конкретные значения, не привыкайте к этому... Это может сослужить очень плохую службу... Везде, где только можно, пользуйтесь предопределенными константами

Смотрите комментарии.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Бывалый
***

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

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


Спасибо большое за обьяснение и извините за беспокойство! Я все поняла.


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

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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