Jak użyć Memo.Lines.SaveToFile pod Androidem?

0

No właśnie ten problem dotyczy aplikacji pod win32, zapomniałem zaznaczyć to , przepraszam . Android wysyła gotowy plik.txt na ftp a na stacjonarnym inna aplikacja pobiera ten plik z serwera . jeszcze tylko z tym się uporam i chyba koniec będzie. Sprawdzę indy http , dzięki za podpowiedź.

0

Dotyczy programu pod win32.

Witam . Wiec jest tak :

Var
 ms:TMemoryStream;
begin 

idhttp1.request.cachecontrol:='no-cache';

ms:=TMemoryStream.Create;
  Idhttp1.get('http://xxx/tablica.txt',ms);
  ms.SaveToFile('C:\xrapis\tablicamobilna.txt');
  ms.Free;

   idhttp1.Free;

end;

ale dalej 'pobiera' nieaktualny plik . Jak użyje IdFTP do pobierania to jest git , problem z tym ze na kompie gdzie program miał by działać jest zablokowany port ftp . Jedynie port www jest odblokowany . Jest szansa żeby to opanować , czy kombinować z dodawaniem np daty i godziny do nazwy pliku . Czy ma znaczenie jaka przeglądarka www jest zainstalowana na komputerze w związku z tym problemem.

1

To wygląda tak, jakby ten plik tekstowy na serwerze był cache'owany, skoro przez WWW pobiera starą wersję, a przez FTP bieżącą. Sprawdź to.

0

To wygląda tak, jakby ten plik tekstowy na serwerze był cache'owany, skoro przez WWW pobiera starą wersję, a przez FTP bieżącą

... chyba tak jest .po kilkudziesięciu minutach pobiera nowy plik na przeglądarce .Wiec po ludzku tego nie da sie zrobić . Myślę nad plikami z jakimiś znacznikami w nazwie np nazwa plików to liczby np od 0 do 100 coś 0.txt kolejny 1.txt itd im nowszy tym większa liczba . Później program do pobierania tych plików będzie pobierał np w pętli for i= 0 to 100, pliki od nazwy i.txt , aż któregoś nie znajdzie . Więc ostatni który był pobrany będzie najnowszym plikiem . Co jakiś czas idFTP usunie pliki z serwera i zacznie je wysyłać na serwer od nowa czyli 0.txt 1.txt itd . Troche pod górke ale nic innego mi nie przychodzi do głowy . Więc moje pytanie jest takie , jak obsłużyć coś takiego w idHTTP.get żeby przy braku pliku na serwerze nie krzyczał błędem tylko np jakieś false/true odczytać ..

1

No to masz dokładnie taką samą sytuację jak ja ze swoją stronką.

Wrzucam nowe pliki na serwer po FTP (głównie chodzi o pliki .css), odświeżam stronę w przeglądarce i nie widzę zmian – cache przeglądarki nie jest temu winny. Cloudflare cache'uje te pliki, więc przeglądarka nie widzi zmian, natomiast z poziomu lokalnego menedżera plików operuję na najświeższych. Dopiero po jakimś czasie (z reguły jest to 40-60 minut) przeglądarka otrzymuje już te aktualne.

Sprawdź więc czy jakaś usługa cache'uje te pliki i jeśli tak to cóż… wyłącz tę usługę lub skonfiguruj. ;)

1

Przecież podałem co trzeba zrobić pod Windows DeleteUrlCacheEntry.

0

Przecież podałem co trzeba zrobić pod Windows DeleteUrlCacheEntry

... sprawdziłem w pierwszej kolejności ,,,, nie pykło . Myślę ze ten plik nie jest przechowywany u mnie na kompie tylko gdzieś w sieci . Gdzieś czytałem ze tak robią dostawcy internetu żeby panować na przepustowością :) .Wyświetlałem go na przeglądarce w której wyczyściłem wszystkie pliki tymczasowe itp i dalej miałem stary plik dopiero po ok 30 minutach pojawił się nowy , i tak w kółko . Na razie całość testuje . Spróbuje ominąć to tak jak napisałem wcześnie // temat ze znacznikami w nazwach plików//, zobaczymy co z tego wyjdzie .

1

Spróbuj w takim razie na piechotę.

uses Winapi.Wininet;

procedure DownloadFile(AUrl, AFileName: string);
const
  BUFFER_SIZE = 1024;
  USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0';
var
  Buffer: array[1..BUFFER_SIZE] of Byte;
  hInt, hURL: HINTERNET;
  dwBytesRead: Dword;
  fs: TFileStream;
begin
  hInt:= InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if hInt <> nil then
  begin
    hURL:= InternetOpenURL(hInt, PChar(AUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
    if hURL <> nil then
    begin
      fs:= TFileStream.Create(AFileName, fmCreate or fmOpenWrite);
      repeat
        InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwBytesRead);
        fs.WriteBuffer(Buffer, dwBytesRead);
      until dwBytesRead = 0;
      fs.Free;
      InternetCloseHandle(hURL);
    end;
    InternetCloseHandle(hInt);
  end;
end;

Flaga INTERNET_FLAG_RELOAD powoduje, że nie powinno pobierać z cache jak to nie zadziała to już nie wiem :/

0

Wisi na Uses .

screenshot-20171122200635.png

1

Dwa razy masz przyłączony moduł WinInet – jeden bez przestrzeni, drugi jako Winapi.Wininet.

0

wybacz . Ślepota już mnie chyba ogarnia . A wertowałem to kilka razy ,, ehh

0

Witam ponownie . Program przeszedł fazę testów i aktualnie używany z powodzeniem ułatwiając życie wielu ludziom. Jeszcze raz dziękuje za pomoc . Choć pewnie nie raz jeszcze będę jej potrzebował w przyszłości . Pozdrawiam i jeszcze raz dziękuje .

0

Witam po długiej przerwie . Pomocy . Czego tu nie ma >?., Zainstalowałem XE8 na nowym komputerze ,, przeniosłem ze starego cały folder C:\Users\Public\Documents\Embarcadero ale przy próbie odpalenia na androidzie aplikacji takie coś .Pod win 32 odpala ok . screenshot-20190831001450.png
temat dotyczy aplikacji z tego tematu ale trzeba było zrobić aktualizacje a tu zong . Czego brakuje i jak to doinstalować .gdzie szukać , Niby wszystko jest a jednak czegoś nie ma ,.

1 użytkowników online, w tym zalogowanych: 0, gości: 1