copiar arquivo
Como se faz para, via programação, copiar um arquivo que está protegido. Ou seja, sem apresentar a mensagem de que houve uma violação de compartilhamento ?
Rodrigo Costa
Curtidas 0
Respostas
Celo-faveri
14/11/2003
amigo...você pode fazer da seguinte forma:
Mas...tipo, como o nome dos arquivos são do estilo PChar, e você quiser colocar os nomes dos arquivos(original e copiado) em tempo de execução, use a seguinte função:
Exemplo de uso:
T+ :wink:
[color=darkblue:22be7b85eb]CopyFile(´CAMINHO DO ARQUIVO A SER COPIADO´, ´CAMINHO E NOME DO NOVO ARQUIVO´, False);
Exemplo:
CopyFile(´C:\TESTE.TXT´, ´C:\TESTE_COPIADO.TXT´, False);[/color:22be7b85eb]
Mas...tipo, como o nome dos arquivos são do estilo PChar, e você quiser colocar os nomes dos arquivos(original e copiado) em tempo de execução, use a seguinte função:
[color=darkblue:22be7b85eb]function ConvertStringToPChar(arq: String): PChar;
Var PCharString : Array[0..255] of Char;
begin
Result := StrPCopy(PCharString,arq);
end;[/color:22be7b85eb]
Exemplo de uso:
[color=darkblue:22be7b85eb]function ConvertStringToPChar(arq: String): PChar;
Var PCharString : Array[0..255] of Char;
begin
Result := StrPCopy(PCharString,arq);
end;
procedure TForm1.Button1Click(Sender: TObject);
var arq, arqcopy : string
begin
arq := ExtractFilePath(Application.ExeName) + ´teste.txt´;
arqcopy := ExtractFilePath(Application.ExeName) + ´teste_copiado.txt´;
if FileExist(arq) then
begin
CopyFile(ConvertStringToPChar(arq), ConvertStringToPChar(arqcopy), False);
ShowMessage(´Arquivo Copiado´);
end;
end;[/color:22be7b85eb]
T+ :wink:
GOSTEI 0
Rodrigo Costa
14/11/2003
Valeu pela ajuda celo-faveri, mas não funcionou para arquivos protegidos.
Eu quero copiar o arquivo NTUSER.DAT e não consigo !
Alguem sabe como fazer ?
Eu quero copiar o arquivo NTUSER.DAT e não consigo !
Alguem sabe como fazer ?
GOSTEI 0
Beppe
14/11/2003
[quote:e2e2470f0b=´celo-faveri´]
[/quote:e2e2470f0b]
Não faça isso. A função StrPCopy copia a string para o array passado, retornando o mesmo. O problema é que você está retornando memória que é garbage, como você usará o retorno da função só quando ela retornar, acessando assim memória inválida.
Quando houver necessidade de converter uma string para PChar para passar para uma função, use uma typecast. Ex Pointer(Minha_String).
Ataliba
[color=darkblue:e2e2470f0b]function ConvertStringToPChar(arq: String): PChar;
Var PCharString : Array[0..255] of Char;
begin
Result := StrPCopy(PCharString,arq);
end;[/color:e2e2470f0b]
[/quote:e2e2470f0b]
Não faça isso. A função StrPCopy copia a string para o array passado, retornando o mesmo. O problema é que você está retornando memória que é garbage, como você usará o retorno da função só quando ela retornar, acessando assim memória inválida.
Quando houver necessidade de converter uma string para PChar para passar para uma função, use uma typecast. Ex Pointer(Minha_String).
Ataliba
GOSTEI 0
Rodrigo Costa
14/11/2003
Obrigado pela resposta Ataliba, mas o problema não é este, pois nem usei esta função. O problema é que este comando: [color=red:73914ac543]CopyFile(´C:\ntuser.dat´, ´C:\backup\ntuser.dat´, False);[/color:73914ac543] não funciona para arquivos protegidos, funciona apenas para copiar arquivos comuns (txt,doc,exe...).
Será que algúem sabe como fazer, ou pelo menos saiba que não tem como copiar arquivos protegidos do Windows ?
Será que algúem sabe como fazer, ou pelo menos saiba que não tem como copiar arquivos protegidos do Windows ?
GOSTEI 0