Версия для печати темы
Форум «Всё о Паскале» _ Теоретические вопросы _ Работа с папками
Автор: Qleek 28.01.2005 15:31
Здравствуйте, это мое первое сообщение на форуме...
Вот у меня такая задачка:
прога должна считать с дискеты названия папок и вывести их на экран.
Сразу вопрос: возможно ли это если дириктории имеют русские названия или название слишком длинное...?
Полистал учебники, но ничего похожего не нашел...
Помогите пожалуйста, если можете...
Автор: volvo 28.01.2005 15:41
Qleek
Каким компилятором пользуемся? Если ТР, то в случае длинного имени оно будет усекаться до 8-ми знаков (вместо "My Documents" будет "MYDOCU~1"). Кириллица, насколько я помню, через ТР не отображается.
Автор: Altair 28.01.2005 20:37
Цитата
Кириллица, насколько я помню, через ТР не отображается.
Отображается!
Любые имена хорошо отображаются, была бы загруженна кодовая страница 866.
И усекаются жо 8 симв. имя...
Автор: Qleek 28.01.2005 21:29
Так вот мой вопрос сам по себе: как заставить программу прочитать название папок? для этого есть команда? А компилятор - TP7. И еще, если имя более 8 символов, сможет ли программа в этой папке, которую найдет на дискете, создать текстовый файл?
Автор: volvo 28.01.2005 21:46
Цитата(Qleek @ 28.01.05 16:29)
как заставить программу прочитать название папок? для этого есть команда?
Для этого пользуемся вот такой конструкцией (она ищет все директории в корневом каталоге 'A:\' и печатает их названия...):
Код
uses dos;
var sRec: SearchRec;
begin
findfirst('A:\*.*', directory, sRec);
while doserror = 0 do
begin
with sRec do write(name:15);
findnext(sRec)
end;
end.
Автор: Qleek 28.01.2005 22:13
ух ты.... оно даже работает... :D спасибо....
но у меня назрел еще вопрос:
можно ли каждой папке присвоить свою переменную?
и если это переменная равна заложенной в программе, открыть эту папку и записать файл именно туда.... те прога должна спросить у меня в какую папку нада файлик бросить...
Автор: volvo 28.01.2005 22:37
Qleek
Цитата
оно даже работает...
А если оно не работает, зачем постить?
А насчет
Цитата
прога должна спросить у меня в какую папку нада файлик бросить...
Просто читаем имя папки, проверяем, что она существует, и копируем в нее файл... К сожалению, средства копирования файлов в Паскаль не встроены, и надо писать свою функцию, или вызывать "command.com"
Автор: Qleek 28.01.2005 23:04
Цитата
А если оно не работает, зачем постить?
это юмор...
Цитата
Просто читаем имя папки
если можно, пожалуйста поподробнее, а то у меня не получилось...
Автор: volvo 28.01.2005 23:18
Что значит не получилось? Я бы делал так:
Код
uses dos;
var sRec: SearchRec;
const
name_to_copy = 'C:\test.exe';
begin
write('enter the dir name: '); readln(s);
findfirst('A:\'+s, directory, sRec);
if DosError <> 0 then halt; {директория не существует}
...
{а вот тут - каким-то образом копировать файл
с именем name_to_copy в папку 'A:\'+s}
end.
Автор: Altair 28.01.2005 23:33
Цитата
К сожалению, средства копирования файлов в Паскаль не встроены, и надо писать свою функцию, или вызывать "command.com"
Не обязательно через command.com, можно побайтово копировать, или еще способ красивый через объекты (см. ФАК)
Автор: Qleek 29.01.2005 1:02
:molitva: Большое спасибо, вы мне очень помогли...
Автор: Digitalator 29.01.2005 4:19
Цитата(Oleg_Z @ 29.01.05 3:33)
Не обязательно через command.com, можно побайтово копировать, или еще способ красивый через объекты (см. ФАК)
ООП хорошо когда в меру - скоро уже начнут каждый пиксель на экране монитора представлять как объект (причем как наследник базового класса с примерно 30 методами, 3 разными конструкторами и полусотней полей, которые будут в являться объектами, записями, всевозможными дескриптормаи )
А по теме - чем тебя BlockRead + Blockwrite смущает, для такой архисложнойзадачи думаю они в самый раз
Автор: Altair 29.01.2005 4:24
Цитата
А по теме - чем тебя BlockRead + Blockwrite смущает, для такой архисложнойзадачи думаю они в самый раз
Меня ничем, но рассказать стоит имхо про все.
Автор: Digitalator 29.01.2005 4:35
не могу не согласиться :yes:
Автор: Qleek 29.01.2005 16:14
В процессе написания программы у меня возник один ламерской вопрос:
вот есть у меня переменная:
Цитата
Var st:string;
можно ли этой переменную приравнять к названию одной из папки?
Автор: FreeMan 29.01.2005 16:27
Код
uses dos;
var sRec: SearchRec;
st:string;
begin
findfirst('A:\*.*', directory, sRec);
if doserror=0 then st:=sRec.Name else halt(1);
WriteLn(st);
end.
Можно
Автор: Qleek 29.01.2005 20:30
FreeMan, спасибо.
Господа, позвольте поинтересоваться:
возможен ли поиск скрытых папок и файлов?
Автор: volvo 29.01.2005 20:48
Цитата
возможен ли поиск скрытых папок и файлов?
Вполне... Вот эта программка печатает имена скрытых папок на F:\
Код
uses dos;
var sRec: SearchRec;
begin
writeln('results');
findfirst('F:\*.*', directory+hidden, sRec);
while doserror = 0 do
begin
with sRec do
if attr and hidden = hidden then write(name:15);
findnext(sRec)
end;
end.
Автор: Qleek 29.01.2005 21:15
Цитата
directory+hidden
а какие здесь еще можно употребить параметры?
Цитата
writeln('results')
поясните пожалуйста эту строчку...
Автор: volvo 29.01.2005 21:24
Первая строчка - "пережиток прошлого" Я просто забыл ее удалить (проверял программу с разными атрибутами и вставил ее чтобы разграничивать результаты)...
А насчет какие еще параметры доступны... Вот что определено в модуле Dos:
Код
Const
ReadOnly = $01;
Hidden = $02;
SysFile = $04;
VolumeID = $08;
Directory = $10;
Archive = $20;
AnyFile = $3F;
Автор: Qleek 29.01.2005 21:24
она просто выводит слово results? или нужна еще для чего-нибудь?
Автор: volvo 29.01.2005 21:29
Цитата(Qleek @ 29.01.05 16:24)
просто выводит слово results
:yes:
Автор: Qleek 30.01.2005 1:45
Цитата
Любые имена хорошо отображаются, была бы загруженна кодовая страница 866
подскажите, пожалуйста, как это сделать...
Автор: P@sh@ 31.01.2005 16:38
Qleek
это делается при загрузке системы всяко хорошо тебе знакомыми строчками в autoexec.bat:
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
и еще пожалуй загрузкой драйвера display.sys в файле config.sys