Declarar caminho de arquivo no XP
Pessoal como devo declarar o caminho do Windows XP ? :
C:\Documents and Settings\[user]\Configurações Locais\Dados de Aplicativos\...
Quando coloco este caminho o código trava :(
PS.: No lugar do [user] já tentei colocar o nome do usuário mesmo (ex.:oregon) mas não vai..
C:\Documents and Settings\[user]\Configurações Locais\Dados de Aplicativos\...
Quando coloco este caminho o código trava :(
PS.: No lugar do [user] já tentei colocar o nome do usuário mesmo (ex.:oregon) mas não vai..
Oregon
Curtidas 0
Respostas
Massuda
10/01/2005
Você pode usar a função SHGetSpecialFolderPath declarada na unit ShlObj. Por exemplo:
É preferível usar SHGetSpecialFolderPath pois dependendo da versão do Windows a pasta que você pretende utilizar tem outro nome (por exemplo, no Win98 não existe C:\Documents and Settings).
Qual a mensagem de erro? Por questões de segurança, normalmente não é permitido acessar a pasta de outros usuários. Outra possibilidade é que você esteja usando alguma função que não permita ter espaços no nome do diretório (algumas funções precisam que o nome contendo espaços esteja entre aspas).
uses ShlObj; function PastaLocalDoUsuario: string; const CSIDL_LOCAL_APPDATA = $001C; var Buffer: array[0..MAX_PATH] of Char; begin SHGetSpecialFolderPath(0, @Buffer[0], CSIDL_LOCAL_APPDATA, True); Result := PChar(@Buffer[0]); end;
É preferível usar SHGetSpecialFolderPath pois dependendo da versão do Windows a pasta que você pretende utilizar tem outro nome (por exemplo, no Win98 não existe C:\Documents and Settings).
Quando coloco este caminho o código trava
Qual a mensagem de erro? Por questões de segurança, normalmente não é permitido acessar a pasta de outros usuários. Outra possibilidade é que você esteja usando alguma função que não permita ter espaços no nome do diretório (algumas funções precisam que o nome contendo espaços esteja entre aspas).
GOSTEI 0
Oregon
10/01/2005
Valeu pela ajuda mas como devo inserir o código ?
Estou usando o seguinte código :
procedure TForm1.BitBtn2Click(Sender: TObject);
// Sistema Operacional Windows XP
var
SR: TSearchRec;
I: integer;
Origem, Destino: string;
User: String;
Dir: string;
Begin
If Form1.RadioButton1.Checked then // Verifica se o SO é WXP
begin
User := Form1.Edit1.Text;
If not(Directoryexists(´c:\Documents and Settings\´ + User + ´\´)) then
begin
ShowMessage (´Caminho inválido. Digite o caminho correto respeitando letras Maiúsculas e Minúsculas.´);
end;
I := FindFirst(´c:\Documents and Settings\´ + User + ´\*.*´, faAnyFile, SR);
while I = 0 do begin
if (SR.Attr and faDirectory) faDirectory then begin
Origem := ´c:\Documents and Settings\´ + User + ´\´ + SR.Name;
If not (directoryExists(´C:\backup-XP´)) then
begin
Dir := ´C:\backup-XP´;
ForceDirectories(Dir);
end;
Destino := ´c:\backup-XP\´ + SR.Name;
StatusBar1.Panels[0].Text:=´Backup executado com sucesso !´;
if not CopyFile(PChar(Origem), PChar(Destino), false) then
// ShowMessage(´Erro ao copiar ´ + Origem + ´ para ´ + Destino);
// end;
I := FindNext(SR);
end;
end;
end
else ...
Estou usando o seguinte código :
procedure TForm1.BitBtn2Click(Sender: TObject);
// Sistema Operacional Windows XP
var
SR: TSearchRec;
I: integer;
Origem, Destino: string;
User: String;
Dir: string;
Begin
If Form1.RadioButton1.Checked then // Verifica se o SO é WXP
begin
User := Form1.Edit1.Text;
If not(Directoryexists(´c:\Documents and Settings\´ + User + ´\´)) then
begin
ShowMessage (´Caminho inválido. Digite o caminho correto respeitando letras Maiúsculas e Minúsculas.´);
end;
I := FindFirst(´c:\Documents and Settings\´ + User + ´\*.*´, faAnyFile, SR);
while I = 0 do begin
if (SR.Attr and faDirectory) faDirectory then begin
Origem := ´c:\Documents and Settings\´ + User + ´\´ + SR.Name;
If not (directoryExists(´C:\backup-XP´)) then
begin
Dir := ´C:\backup-XP´;
ForceDirectories(Dir);
end;
Destino := ´c:\backup-XP\´ + SR.Name;
StatusBar1.Panels[0].Text:=´Backup executado com sucesso !´;
if not CopyFile(PChar(Origem), PChar(Destino), false) then
// ShowMessage(´Erro ao copiar ´ + Origem + ´ para ´ + Destino);
// end;
I := FindNext(SR);
end;
end;
end
else ...
GOSTEI 0
Massuda
10/01/2005
Depois de dar uma olhada em seu código, acho que seu problema não é o nome do diretório, mas sim o fato da sua função entrar em loop infinito ao tentar listar o conteúdo do diretório. Experimente este código:
procedure TForm1.BitBtn2Click(Sender: TObject);
// Sistema Operacional Windows XP
var
SR: TSearchRec;
I: Integer;
Origem, Destino: string;
User: string;
Dir: string;
begin
if Form1.RadioButton1.Checked then {// Verifica se o SO é WXP } begin
User := Form1.Edit1.Text;
if not (Directoryexists(´c:\Documents and Settings\´ + User + ´\´)) then begin
ShowMessage(´Caminho inválido. Digite o caminho correto respeitando letras Maiúsculas e Minúsculas.´);
end;
I := FindFirst(´c:\Documents and Settings\´ + User + ´\*.*´, faAnyFile, SR);
while I = 0 do begin
if (SR.Attr and faDirectory) <> faDirectory then begin
Origem := ´c:\Documents and Settings\´ + User + ´\´ + SR.Name;
if not (directoryExists(´C:\backup-XP´)) then begin
Dir := ´C:\backup-XP´;
ForceDirectories(Dir);
end;
Destino := ´c:\backup-XP\´ + SR.Name;
StatusBar1.Panels[0].Text := ´Backup executado com sucesso !´;
if not CopyFile(PChar(Origem), PChar(Destino), False) then
// ShowMessage(´Erro ao copiar ´ + Origem + ´ para ´ + Destino);
end; // <<< DESCOMENTE ESTA LINHA
I := FindNext(SR);
//end; // <<< COMENTE ESTA LINHA
end;
end
else ...GOSTEI 0