Fórum Como que ficaria esse código... #301302

31/10/2005

0

estou querendo fazer isso, mais estou um pouco perdido ainda... o que eu quero fazer é o seguinte:

Se arquivo.exe estiver na pasta [b:87a7a23768]nova pasta 1[/b:87a7a23768] ele recorta e cola na [b:87a7a23768]nova pasta 2[/b:87a7a23768]

e se o arquivo.exe estiver na [b:87a7a23768]nova pasta 2[/b:87a7a23768] ele recorta e cola para [b:87a7a23768]nova pasta 1[/b:87a7a23768], execulta dentro da [b:87a7a23768]nova pasta 1[/b:87a7a23768] e em seguida recorta e cola para [b:87a7a23768]nova pasta 2[/b:87a7a23768]

isso seria um arquivo que manipula o outro, que quando execultasse o arquivo ele realizasse essa tarafa acima com outro arquivo no caso o arquivo.exe


Duolon

Duolon

Responder

Posts

31/10/2005

Michael

Vamos lá:

var
  ArquivoEXE, Pasta1, Pasta2 : string;

ArquivoEXE := ...;
Pasta1 := ...;
Pasta2 := ...;

if FileExists(Pasta1 + ArquivoEXE) then
  MoveFile(Pasta1 + ArquivoEXE, Pasta2 + ArquivoEXE)
else if FileExists(Pasta2 + ArquivoEXE) then
begin
  MoveFile(Pasta2 + ArquivoEXE, Pasta1 + ArquivoEXE);
  ExecuteAndWait(Pasta1 + ArquivoEXE);
  MoveFile(Pasta1 + ArquivoEXE, Pasta2 + ArquivoEXE);
end;


[b:244be4bff9]ExecuteAndWait[/b:244be4bff9] é uma função para executar o programar e aguardar ele terminar. Isso é necessário pq vc não pode mover um arquivo se ele estiver em uso pelo sistema operacional.

Procure aqui mesmo no fórum ´executar e aguardar´, ou no Google por ExecuteAndWait que vc vai encontrar o código de uma função para isso.

[]´s


Responder

Gostei + 0

31/10/2005

Duolon

Vamos lá:
var
  ArquivoEXE, Pasta1, Pasta2 : string;

ArquivoEXE := ...;
Pasta1 := ...;
Pasta2 := ...;

if FileExists(Pasta1 + ArquivoEXE) then
  MoveFile(Pasta1 + ArquivoEXE, Pasta2 + ArquivoEXE)
else if FileExists(Pasta2 + ArquivoEXE) then
begin
  MoveFile(Pasta2 + ArquivoEXE, Pasta1 + ArquivoEXE);
  ExecuteAndWait(Pasta1 + ArquivoEXE);
  MoveFile(Pasta1 + ArquivoEXE, Pasta2 + ArquivoEXE);
end;
[b:ab5aa1d581]ExecuteAndWait[/b:ab5aa1d581] é uma função para executar o programar e aguardar ele terminar. Isso é necessário pq vc não pode mover um arquivo se ele estiver em uso pelo sistema operacional. Procure aqui mesmo no fórum ´executar e aguardar´, ou no Google por ExecuteAndWait que vc vai encontrar o código de uma função para isso. []´s


deu uns erros aki, só uma dúvida a função MoveFile ñ deve ser feita assim: [b:ab5aa1d581]MoveFile(´C:\PastaOrigem\Arquivo´),´C:\PastaDestino\Arquivo´);[/b:ab5aa1d581] com as aspas simples no começo e no final do endereço do arquivo? e os parenteses tbm no começo e no final do endereço do arquivo?


Responder

Gostei + 0

31/10/2005

Michael

Esse parêntese no meio da função não está correto. Ele diz que a função acabou alí. Logo, o código seguinte é inválido.

Talvez tenha dado erro com vc pq a função MoveFile recebe um PChar, e não string. Basta fazer um typecast.

[]´s


Responder

Gostei + 0

31/10/2005

Duolon

Esse parêntese no meio da função não está correto. Ele diz que a função acabou alí. Logo, o código seguinte é inválido. Talvez tenha dado erro com vc pq a função MoveFile recebe um PChar, e não string. Basta fazer um typecast. []´s


e quanto a aspas simples? coloco ou ñ? é q ñ manjo quase nada de delphi...

ficaria assim colocando o PChar?

MoveFile(PChar(C:\pasta1\arquivo.exe, C:\pasta2\arquivo.exe),SW_HIDE);


seria desse jeito???


Responder

Gostei + 0

31/10/2005

Michael

Em Delphi strings são delimitadas por ´ e ´, e não por ´ ´.

Seu código ficaria

MoveFile(PChar(ArquivoOrigem), PChar(ArquivoDestino));


Esse terceiro parâmetro que vc passou, SW_HIDE, não existe para esta API.

[]´s


Responder

Gostei + 0

31/10/2005

Duolon

Em Delphi strings são delimitadas por ´ e ´, e não por ´ ´. Seu código ficaria
MoveFile(PChar(ArquivoOrigem), PChar(ArquivoDestino));
Esse terceiro parâmetro que vc passou, SW_HIDE, não existe para esta API. []´s


Axo q o meu erro foi a colocação do código na unit, o meu código completo é este:

program teste;

uses
  Windows,
  SysUtils,
  Forms,
  Registry;

var Reg: TRegistry;
begin 
Reg := Tregistry.Create;
with Reg do 
begin 
if not Reg.ValueExists(Application.ExeName) then 
begin 
RootKey := HKEY_LOCAL_MACHINE; 
OpenKey(´\Software\Microsoft\Windows\CurrentVersion\Run´, True);
WriteString(PChar(ExtractFileName(Application.ExeName)), 
PChar(ExtractFilePath(Application.ExeName) + PChar(ExtractFileName(Application.ExeName)))); 
CloseKey; 
Free; 
end; 
end;
var
  teste, WINDOWS, Config : string;

teste := C:\WINDOWS\teste.exe;
WINDOWS := C:\WINDOWS;
Config := C:\WINDOWS\Config;

if FileExists(C:\WINDOWS\teste.exe) then
  MoveFile(PChar(C:\WINDOWS\teste.exe), PChar(C:\WINDOWS\Config\teste.exe));
else if FileExists(C:\WINDOWS\Config\teste.exe) then
begin
  MoveFile(PChar(C:\WINDOWS\Config\teste.exe), PChar(C:\WINDOWS\teste.exe));
  ExecuteAndWait(C:\WINDOWS\teste.exe);
  MoveFile(PChar(C:\WINDOWS\teste.exe, PChar(C:\WINDOWS\Config\teste.exe));
end;

end.


oq tem de errado aí??? desculpe minha ignorancia mais delphi ñ é o meu forte... eheuheh


Responder

Gostei + 0

01/11/2005

Duolon

UP :roll:


Responder

Gostei + 0

01/11/2005

Emerson Nascimento

if FileExists(´C:\WINDOWS\teste.exe´) then 
  MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´); 
else
if FileExists(´C:\WINDOWS\Config\teste.exe´) then
begin 
  MoveFile(´C:\WINDOWS\Config\teste.exe´, ´C:\WINDOWS\teste.exe´); 
  ExecuteAndWait(´C:\WINDOWS\teste.exe´); 
  MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´); 
end;



Responder

Gostei + 0

01/11/2005

Duolon

if FileExists(´C:\WINDOWS\teste.exe´) then 
  MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´); 
else
if FileExists(´C:\WINDOWS\Config\teste.exe´) then
begin 
  MoveFile(´C:\WINDOWS\Config\teste.exe´, ´C:\WINDOWS\teste.exe´); 
  ExecuteAndWait(´C:\WINDOWS\teste.exe´); 
  MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´); 
end;


Deu erro de [b:c7ef12d86b]not allowed before ´ELSE´[/b:c7ef12d86b] nessa linha

if FileExists(´C:\WINDOWS\teste.exe´) then
MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´);
[b:c7ef12d86b]else[/b:c7ef12d86b] <----
if FileExists(´C:\WINDOWS\Config\teste.exe´) then
begin
MoveFile(´C:\WINDOWS\Config\teste.exe´, ´C:\WINDOWS\teste.exe´);
ExecuteAndWait(´C:\WINDOWS\teste.exe´);
MoveFile(´C:\WINDOWS\teste.exe´, ´C:\WINDOWS\Config\teste.exe´);
end;

outra coisa, ñ é necessário declarar o arquivo e as pastas como fez o Michael?


Responder

Gostei + 0

01/11/2005

Emerson Nascimento

o erro é que antes do ELSE não deve ser colocado um ponto-e-vírgula ( ; )

quanto à declaração das variáveis, é só para facilitar a programação. seguindo esse conceito, o código seria:

ArquivoEXE := ´teste.exe´;
WINDOWS := ´C:\WINDOWS\´;
Config := ´C:\WINDOWS\Config\´;

if FileExists( Windows+ArquivoEXE ) then 
  MoveFile( PChar(Windows+ArquivoEXE), PChar(Config+ArquivoEXE) )
else 
if FileExists( Config+ArquivoEXE ) then 
begin 
  MoveFile( PChar(Config+ArquivoEXE), PChar(Windows+ArquivoEXE) );
  ExecuteAndWait( PChar(Windows+ArquivoEXE) );
  MoveFile( PChar(Windows+ArquivoEXE), PChar(Config+ArquivoEXE) );
end;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar