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

> Правила раздела!

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

> Копирование файла
Darkwolf
сообщение 17.03.2004 16:41
Сообщение #1


Новичок
*

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

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


Кто ни будь знает как сделать так чтобы призапуске програмы она копировала
фаил в в у казаную втексте проги папку и прописавала бы в реестре запуск этого файла при загрузки компа.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Atos
сообщение 22.03.2004 5:55
Сообщение #2


Прогрессор
****

Группа: Модераторы
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

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


А вот и прога:
uses dos,crt;
const Recs=100; {записи нетипизированного файла}

var buf: array [1..512*Recs] of byte;

{Iz - имя файла}
{V - папка, куда он будет скопирован}
function Kopy3(Iz,V:string):byte;
var f, f1:file;
Dir:DirStr;
Name:NameStr;
Ext:Extstr;
i,s:longint;
text512:array[1..512] of char;
ost:word;
at:word;
begin
Kopy3:=0;
FSplit(Iz,Dir,Name,Ext);
{$I-}assign(f,Iz);{$I+}
if ioresult<>0 then Kopy3:=1 else
begin
GetFAttr(f,at); if at mod 2 = 1 then SetFAttr(f,at-1);
{$I-}reset(f,1); {$I+}
if ioresult<>0 then Kopy3:=2 else
begin
seek(f,0);
{$I-}assign(f1,V+Name+Ext);{SI+} rewrite(f1,1);
if ioresult<>0 then Kopy3:=3 else
begin
seek(f1,0);
s:=filesize(f);
if s<=512 then
begin
Blockread(f,buf,s);
Blockwrite(f1,buf,s);
end
else {размер файла больше 512 байт}
begin
ost:=s mod 512;
if s<=512*Recs then
begin
Blockread(f,buf,s-ost);
Blockwrite(f1,buf,s-ost);
end
else {файл большой}
begin
for i:=1 to (s div (512*Recs)) do
begin
Blockread(f,buf,512*Recs);
Blockwrite(f1,buf,512*Recs);
end;
Blockread(f,buf,(s mod (512*Recs))-ost);
Blockwrite(f1,buf,(s mod (512*Recs))-ost);
end;
Blockread(f,buf,ost);
Blockwrite(f1,buf,ost);
end;
SetFAttr(f,at); SetFAttr(f1,at);
close(f1);
end;
close(f);
end;
end;
end;


function KopyDir(Iz,V:string):byte;
var Dir:DirStr;
Name:NameStr;
name0:string;
Ext:Extstr;
s:searchRec;
at,i,l:byte;
OK:boolean;
begin
name0:='..';
KopyDir:=0;
FSplit(Iz,Dir,Name,Ext); writeln(dir,' ',Name,' ',Ext); {readln;}
MKDir(V+Name);
CHDir(IZ);
FindFirst('*.*', Anyfile, s);
FindNext(S);
FindNext(S);
OK:=true;
while OK and not(s.name='.') and not(s.name='..') do
begin
name0:=concat(s.name,' '); {writeln(name0); readln;}
l:=length(s.name);
at:=s.attr;
if ((at>=16) and (at<64) and ((at>=48) or (at<32))) then
KopyDir:=KopyDir(Iz+'\'+S.Name,V+Name+'\')
else Kopy3(Iz+'\'+s.name,V+Name+'\');
FindNext(S);

if l=length(s.name) then
begin
for i:=1 to length(s.name) do
if not(name0[i]=s.name[i]) then begin OK:=true; break; end
else OK:=false;
if not(OK) then OK:= not(name0[1+length(s.name)]=' ');
end;
end;
end;


var i:word;
k:byte;
begin
clrscr;
write(KopyDir('D:\lab','D:\Chess\'));{пример вызова процедуры}
{write(Kopy3('D:\dm5.bsp', 'D:\Њ®с\'));}
readln;
end.

Прогу писал абсолютно самостоятельно, но всё-таки работает. smile.gif Недоделана, правда, обработка ошибок. Хотя, по идее, их и не должно возникать, если не пытаться копировать на защищённый диск или вообще в никуда. Если можно ещё оптимизировать код, подскажите.
Замечания по проге:
  1. Если компилировать в TP, то имена копируемых файлов усекаюся до 8 букв.
    А Virtual Pascal всё делает нормально.
  2. Строчкой if at mod 2 = 1 then SetFAttr(f,at-1); снимается защита с файлов, если она есть, а потом вновь устанавливаем её у исходного и созданного файлов. В принципе, если так переделывать прогу, чтобы она перемещала файлы, то можно выдавать запрос на перемещение таких файлов, как это делает винда.
  3. Зачем за строчкой FindFirst('*.*', Anyfile, s); поставлено два финднекста?
    Потому что Паскаль сначала выдаёт '..' , затем '.' и уже после этого имена реально существующих файлов, хоть убей, не пойму, почему. Может, кто может сказать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Darkwolf   Копирование файла   17.03.2004 16:41
SKVOZNJAK   Если требуется лишь запуск проги при старте компа,...   17.03.2004 20:35
Darkwolf   SKVOZNJAK спасибо попробую   18.03.2004 6:29
trminator   Прописать в реестре автозапуск можно, написав .reg...   18.03.2004 6:36
Atos   Всё собираюсь и никак не соберусь выложить прогу, ...   20.03.2004 7:22
Atos   А вот и прога: uses dos,crt; const Recs=100; {запи...   22.03.2004 5:55
Dark   Ну копирование это то не сложно, а вот реестр ) чт...   22.03.2004 5:58
Darkwolf   Atos программку посмотрю, если получется что то у...   22.03.2004 9:19
Atos   К сожалению, во всём, что касается реестра, автоза...   23.03.2004 15:03
Darkwolf   Atos если есть ещё интересные программки и матерья...   23.03.2004 15:32
Altair   Атрибут есть у каждого файла или папки, 1) У пап...   25.03.2004 10:02
GLuk   2Oleg_Z: Ты имел ввиду единственный способ работы ...   28.03.2004 11:15
Atos   А это что-то даёт, кроме просто увеличения свобод...   29.03.2004 6:45
trminator   Теоретически, должна возрасти скорость работы с ре...   29.03.2004 19:54
P@sh@   для физического ужатия файлов реестра как в W98, т...   1.04.2004 9:30
P@sh@   по поводу копирования файлов - делал я когда-то не...   1.04.2004 9:41
Atos   Круто... P@sh@, а исходник не выложишь?   3.04.2004 8:55
BlackShadow   Uses WinProcs,Strings,ShellAPI; Const  Destinat...   6.04.2004 10:56
P@sh@   программа копирования файлов (одного файла за раз)...   7.04.2004 5:15
Atos   Да, до такого мне ещё расти... Обязательно попытаю...   7.04.2004 9:34
Altair   А вот очень красивый вариант копирования (достал в...   8.04.2004 13:47
P@sh@   Oleg_Z Это из TurboVision, для пользователя да, п...   9.04.2004 10:19
Altair   Да, согласен, кстати на форуме нет ничего про объе...   9.04.2004 10:54
Atos   Если есть исходники TV, то не проблема! {Кста...   9.04.2004 11:54
SKVOZNJAK   http://argon.com.ru/windows/winxp/xpautorun   14.04.2004 19:20
Darkwolf   SKVOZNJAK спасибо обезательно воспользуюсь   15.04.2004 6:02
Dark   Я знаю этот модуль XMS тока он у мя немного расшир...   21.05.2004 5:07


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

 



- Текстовая версия 18.07.2025 16:28
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"