Declarar caminho de arquivo no XP

Delphi

10/01/2005

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..


Oregon

Oregon

Curtidas 0

Respostas

Massuda

Massuda

10/01/2005

Você pode usar a função SHGetSpecialFolderPath declarada na unit ShlObj. Por exemplo:
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

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 ...


GOSTEI 0
Massuda

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
POSTAR