Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с папками
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Qleek
Здравствуйте, это мое первое сообщение на форуме... smile.gif
Вот у меня такая задачка:
прога должна считать с дискеты названия папок и вывести их на экран.
Сразу вопрос: возможно ли это если дириктории имеют русские названия или название слишком длинное...?
Полистал учебники, но ничего похожего не нашел... sad.gif
Помогите пожалуйста, если можете...
volvo
Qleek
Каким компилятором пользуемся? Если ТР, то в случае длинного имени оно будет усекаться до 8-ми знаков (вместо "My Documents" будет "MYDOCU~1"). Кириллица, насколько я помню, через ТР не отображается.
Altair
Цитата
Кириллица, насколько я помню, через ТР не отображается.

Отображается!
Любые имена хорошо отображаются, была бы загруженна кодовая страница 866.
И усекаются жо 8 симв. имя...
Qleek
Так вот мой вопрос сам по себе: как заставить программу прочитать название папок? для этого есть команда? А компилятор - TP7. И еще, если имя более 8 символов, сможет ли программа в этой папке, которую найдет на дискете, создать текстовый файл?
volvo
Цитата(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
ух ты.... оно даже работает... :D спасибо....
но у меня назрел еще вопрос:
можно ли каждой папке присвоить свою переменную?
и если это переменная равна заложенной в программе, открыть эту папку и записать файл именно туда.... те прога должна спросить у меня в какую папку нада файлик бросить...
volvo
Qleek
Цитата
оно даже работает...
blink.gif А если оно не работает, зачем постить?

А насчет
Цитата
прога должна спросить у меня в какую папку нада файлик бросить...
Просто читаем имя папки, проверяем, что она существует, и копируем в нее файл... К сожалению, средства копирования файлов в Паскаль не встроены, и надо писать свою функцию, или вызывать "command.com"
Qleek
Цитата
А если оно не работает, зачем постить?

это юмор... smile.gif
Цитата
Просто читаем имя папки

если можно, пожалуйста поподробнее, а то у меня не получилось...
volvo
Что значит не получилось? Я бы делал так:
Код
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
Цитата
К сожалению, средства копирования файлов в Паскаль не встроены, и надо писать свою функцию, или вызывать "command.com"

Не обязательно через command.com, можно побайтово копировать, или еще способ красивый через объекты (см. ФАК)
Qleek
:molitva: Большое спасибо, вы мне очень помогли...
Digitalator
Цитата(Oleg_Z @ 29.01.05 3:33)
Не обязательно через command.com, можно побайтово копировать, или еще способ красивый через объекты (см. ФАК)

ООП хорошо когда в меру - скоро уже начнут каждый пиксель на экране монитора представлять как объект (причем как наследник базового класса с примерно 30 методами, 3 разными конструкторами и полусотней полей, которые будут в являться объектами, записями, всевозможными дескриптормаи )

А по теме - чем тебя BlockRead + Blockwrite смущает, для такой архисложнойзадачи думаю они в самый раз smile.gif
Altair
Цитата
А по теме - чем тебя BlockRead + Blockwrite смущает, для такой архисложнойзадачи думаю они в самый раз

Меня ничем, но рассказать стоит имхо про все.
Digitalator
не могу не согласиться :yes:
Qleek
В процессе написания программы у меня возник один ламерской вопрос:
вот есть у меня переменная:
Цитата
Var  st:string;

можно ли этой переменную приравнять к названию одной из папки?
FreeMan
Код
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
FreeMan, спасибо.
Господа, позвольте поинтересоваться:
возможен ли поиск скрытых папок и файлов?
volvo
Цитата
возможен ли поиск скрытых папок и файлов?

Вполне... Вот эта программка печатает имена скрытых папок на 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
Цитата
directory+hidden

а какие здесь еще можно употребить параметры?

Цитата
writeln('results')

поясните пожалуйста эту строчку...
volvo
Первая строчка - "пережиток прошлого" lol.gif Я просто забыл ее удалить (проверял программу с разными атрибутами и вставил ее чтобы разграничивать результаты)...

А насчет какие еще параметры доступны... Вот что определено в модуле Dos:
Код

Const
   ReadOnly = $01;
   Hidden = $02;
   SysFile = $04;
   VolumeID = $08;
   Directory = $10;
   Archive = $20;
   AnyFile = $3F;
Qleek
она просто выводит слово results? или нужна еще для чего-нибудь?
volvo
Цитата(Qleek @ 29.01.05 16:24)
просто выводит слово results

:yes:
Qleek
Цитата
Любые имена хорошо отображаются, была бы загруженна кодовая страница 866

подскажите, пожалуйста, как это сделать...
P@sh@
Qleek
это делается при загрузке системы всяко хорошо тебе знакомыми строчками в autoexec.bat:
mode con codepage prepare=((866) C:\WINDOWS\COMMAND\ega3.cpi)
mode con codepage select=866
smile.gif
и еще пожалуй загрузкой драйвера display.sys в файле config.sys
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.