Помогите с Turbo Pascal'em

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

Сообщение Ti-Mac » Чт май 13, 2004 5:42 pm

Помогиет мне одолеть такой вот вопрос:
Как в TP7 скопировать\переместить файл? Пробовал всё, а спец функции такой
вроде нет. Чо то пытался сделать так
[qoute]
assign(f1,'file1.exe');
assign(f2,'file2.exe');
reset(f1);
rewrite(f2);
While not EOF(f1) do begin
readln(f1,st);
writeln(f2,st);
end;
close(f1);
close(f2); [/qoute]

Но не работает (половина символов куда-то теряется)

А второй вопросик: функция exec - как она работает?
пишу
[qoute]exec('file.bat','')[/qoute]
А он нифига не запускается!..

Вообще 2 вопроса схожие, мне просто надо скопировать файл paramstr(0) в другую папку: в 1-ом вопросе: через жёсткое копирование всех символов, а во втором попытался через батник сделать (copy ...). А тут блин.... ни тот ни другой не делает... Короче помогите кто-может пожайлуста.
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Night Angel » Чт май 13, 2004 6:23 pm

По второму вопросу надо делать exec("command.com", "/c file.bat") если я не ошибаюсь.

По первому вопросу - попробуй blockread и blockwrite
Auscultura et perpende - Выслушай и взвесь
Теперь я есть в <a href='http://www.livejournal.com/users/mrnight/' target='_blank'>LJ</a>
Night Angel
Полковник
 
Сообщений: 1160
Зарегистрирован: Ср сен 25, 2002 7:20 pm
Откуда: Belarus
Пункты репутации: 0

Сообщение SiMM » Чт май 13, 2004 7:01 pm

<!--QuoteBegin-Ti-Mac+May 13 2004, 21:42--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (Ti-Mac @ May 13 2004, 21:42)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Код: выделить все
assign(f1,'file1.exe');
assign(f2,'file2.exe');
reset(f1);
rewrite(f2);
While not EOF(f1) do begin
                                     readln(f1,st);
                                     writeln(f2,st);
                             end;
close(f1);
close(f2);

не работает (половина символов куда-то теряется) <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Если указываешь код - то нужно указывать всё, относящееся к делу. f1 и f2, надо полагать, объявлены как var f1,f2:Text; ? Так какого же ты работаешь с бинарником как с текстовым файлом? Если не ошибаюсь, надо было объявлять их как var f1,f2:file; - да и "построчное" чтение, наверно, будет некорректно - поищи функции блочного чтения/записи - думаю, должны быть, как и в любом другом языке программирования.
Для переименования/удаления можешь пользоваться функциями Rename и Erase
PS: Может чего забыл или напутал - давно это было Изображение
Последний раз редактировалось SiMM Чт май 13, 2004 7:02 pm, всего редактировалось 1 раз.
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Ti-Mac » Пт май 14, 2004 1:48 am

2Night Angel
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->exec("command.com", "/c file.bat")<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Как мне это понять? В смысле, добавляем в файл command.com инфу из файла file.bat? (как с реестром что-ли?) А мне надо чтобы просто запустился мой bat-ник и скопировал файл с основной прогой в другую папку? Или я чо-то недогоняю?
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->По первому вопросу - попробуй blockread и blockwrite<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Написал вот что
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
Procedure Copying (var f1:file; var f2:file);
var
Buf:array [1..2048] of Char;
numread,numwrite:word;
begin
assign(f1,paramstr(0));reset(f1,1);
assign(f2,'Second.exe');rewrite(f2,1);
repeat
      blockread(f1,buf,sizeof(buf),Numread);
      blockwrite(f2,buf,numread,numwrite);
until (numread=0) or (numread<>numwrite);
close(f1);
close(f2);
end;<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Вроде всё работает, а синтаксис я до конца так и непонял (по справке делал).
2All
Если кто знает что к чему, то объясните пожалуйста синтаксис команд blockread\blockwrite.
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение dAnIK SeNT » Пт май 14, 2004 3:57 am

2Ti-Mac
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Если кто знает что к чему, то объясните пожалуйста синтаксис команд blockread\blockwrite.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
А в хелпе почитать? Там, насколько я помню, синтаксис подробно описан.
Делают эти процедуры буквально следующее - одна считывает блок данных из бинарного файла в твою переменную, а другая - записывает блок данных из переменной в бинарный файл. Параметры задают имя открытого бинарного файла, буферную переменную (куда/откуда происходит запись/считывание), число байт для записи/чтения, число реально записанных/считанных байт.
Последний аргумент можно использовать для проверки - если было считано меньше байт, чем ты просил - значит байты в исходном файле кончились Изображение Правда в твоем примере проверка немного другая, но тоже должна работать Изображение.
readln, writeln естественно, не подходят, т.к. они not binary-safe (длина строки в Паскале - не более 255 символов, строка считается до ближайшего символа CR - ты уверен, что в твоем файле через каждые 255 символов будет проставлен символ CR? ^))

По 2 вопросу - Night Angel тебе абсолютно правильно сказал. Не добавляем инфу из батника в command.com, а запускаем command.com с парамтром /c file.bat (или /c "my long-named file.bat"). Этот параметруказывает командному процессору выполнить команду, помещенную после /c - в данном случае - выполнить пакетный файл.
Последний раз редактировалось dAnIK SeNT Пт май 14, 2004 3:59 am, всего редактировалось 1 раз.
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение SiMM » Пт май 14, 2004 7:09 am

<!--QuoteBegin-Ti-Mac+May 14 2004, 05:48--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата (Ti-Mac @ May 14 2004, 05:48)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> Как мне это понять? В смысле, добавляем в файл command.com инфу из файла file.bat? <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
Запустил бы в командной строке command.com с параметром ? (command.com /?) и всё само бы встало на свои места.
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Ti-Mac » Пт май 14, 2004 11:56 am

2dAnIK SeNT
Огромное спасибо за подробный ответ. Теперь вроде всё понятно с копированием, а вот с exec пока нет. А если мне надо например запустить какую-нить mp3-игу.... В Delphi кажеться там есть функция Winexec, а в Turbo Pascal?
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение SiMM » Пт май 14, 2004 1:11 pm

2Ti-Mac, start /? |more (Цитата: для вызова неисполняемых файлов через механизм сопоставления типов файлов достаточно просто ввести имя файла в командной строке).
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Ti-Mac » Пт май 14, 2004 2:05 pm

2SiMM
Ага! Понятненко.. :) Спасибо!
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Ti-Mac » Сб май 15, 2004 3:38 pm

Вот недавно на Delphi перешёл (наконец-то :)) и тут же у меня опять 2 ламерских вопроса:
1)Мне известна папка, где расположены mp3-файлы.Как мне организовать поиск имён этих самых mp3?
То есть занести их имена, например в строковый массив.
2)Как сделать, чтобы моя программа запускалась как процесс, то есть чтоб её не было ни в
Taskbare, ни в трее?
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение SiMM » Сб май 15, 2004 5:43 pm

2Ti-Mac, по первому вопросу - почитай в хелпе о функциях FindFirst и FindNext (по крайней мере, так они назывались в TP, думаю, в Delphi они так же мигрировали либо в хелпе есть указания на рекомендуемые функции).
IRC: <a href='http://www.fileforum.ru/irc.php' target='_blank'>RUSNET #fileforum</a> (irc.tsk.ru:6669)
SiMM
Подполковник
 
Сообщений: 588
Зарегистрирован: Чт июн 13, 2002 8:41 am
Пункты репутации: 0

Сообщение Ti-Mac » Вс май 16, 2004 3:33 am

2SiMM
Ты был прав! Симигрировали :) Ну если ты разбираешься в этом то объясни пожалуйста некоторые ньюансы(от англ. "newanswers")

Написал эту процедуру, выглядит она так:
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Цитата </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
var
  f:Tsearchrec;
  i,j:shortint;
  names:array [1..100] of string;

begin
i:=1;
findfirst('C:\Music\*.mp3',1,f);//ищем mp3 файл в переменную f
Names[i]:=f.name;//помещаем имя в массив Names
i:=2;
while doserror<>18 do begin//по идеи  - файлов больше нет ?????
findnext(f);//ищем следующий файл в папке
Names[i]:=f.name;//опять его в массив
i:=i+1;
end;
for j:=1 to i do
showmessage(names[i]);//на экран их все по очереди(можно в Listbox)
end. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->

Так вот doserror в Delphi почемуто не работает(или надо в Uses чо-нить вписать?) Можь есть другой путь отлавливать окончание файлов в папке?
И ещё: можно ли опустить параметр 1 в синтаксисе findfirst (я про атрибуты)?
<span style='color:blue'>Formating C: .................98%</span>
<span style='color:red'>Fatal Error:</span> <span style='color:blue'>found Windows</span>
Ti-Mac
Капитан
 
Сообщений: 168
Зарегистрирован: Вс апр 18, 2004 8:18 am
Откуда: Кемерово
Пункты репутации: 0

Сообщение Magister » Пн май 17, 2004 10:13 am

2Ti-Mac
Проверяй значение, возвращаемое FindNext. Если не ноль - то конец.
"И ещё": а ты попробуй. :)
<!--sizeo:1--><span style="font-size:8pt;line-height:100%"><!--/sizeo--><!--coloro:red--><span style="color:red"><!--/coloro-->все беды - от недостатка информации<!--sizec--></span><!--/sizec--><!--colorc--></span><!--/colorc-->
Magister
Генерал-майор
 
Сообщений: 2501
Зарегистрирован: Вт авг 06, 2002 4:22 am
Пункты репутации: 0

Сообщение Night Angel » Пн май 17, 2004 3:09 pm

Нет. Этот параметр указывает аттрибуты искомых файлов, т.е. можно и директории искать, задав соответствующий параметр или скрытые файлы и т.п.

А чтобы прогу не было видно в таскбаре, она не должна создавать окон. А в трее - не надо туда свой значёк пихать.
Auscultura et perpende - Выслушай и взвесь
Теперь я есть в <a href='http://www.livejournal.com/users/mrnight/' target='_blank'>LJ</a>
Night Angel
Полковник
 
Сообщений: 1160
Зарегистрирован: Ср сен 25, 2002 7:20 pm
Откуда: Belarus
Пункты репутации: 0

Сообщение Spike » Вт май 18, 2004 12:06 am

2Ti-Mac
попробуй вместо doserror переменную ioresult, хотя лучше вариант обрабатывать исключения самому. хотя бы try..except
Последний раз редактировалось Spike Вт май 18, 2004 12:09 am, всего редактировалось 1 раз.
<!--coloro:blue--><span style="color:blue"><!--/coloro--><a href="http://www.foobar2000.ru/" target="_blank">www.foobar2000.ru - все о любимом аудиоплеере.</a><!--colorc--></span><!--/colorc-->
RUSnet #foobar2000 #miranda.
<a href="http://www.foobar2000.ru/" target="_blank">Изображение</a>

<!--coloro:red--><span style="color:red"><!--/coloro-->Даша, я люблю тебя!<!--colorc--></span><!--/colorc-->
Spike
Генерал-лейтенант
 
Сообщений: 3036
Зарегистрирован: Вт мар 18, 2003 7:34 am
Откуда: Ачинск, Красноярский край
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron