Załadowanie do TIniFile pliku ze strumienia

0

Witam,

Potrzebuję odczytać zawartość pliku ini przesłanego z serwera i trzymanego w TMemoryStream. Aby utworzyć TIniFile potrzeba podać ścieżkę do pliku na dysku i nie ma opcji odczytu ze strumienia (nie mogę go zapisać na dysku). Jest jakiś inny komponent do obsługi ini pozwalający na załadowanie pliku ze strumienia czy pozostaje stringlista i analiza?

Drugie pytanie odnośnie Internet Explorera i katalogu w którym trzyma pliki tymczasowe - jak odczytać ścieżkę do tego katalogu by móc zapisywać tam pliki (kontrolka activex działająca pod IE)?

Pozdrawiam

0

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365590%28v=vs.85%29.aspx
Nazwę podajesz np. 'testpipe'
Czytasz plik: '\.\pipe\testpipe'

0
  1. @_13th_Dragon nie przesadzaj jest to trochę zamieszane ale nie aż tak (podaję przykład w Delphi bo nie mam BCB)
uses
  IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
  MemStream: TMemoryStream;
  SList: TStringList;
  IniFile: TMemIniFile;
begin
  MemStream:= TMemoryStream.Create;
  MemStream.LoadFromFile('test.ini');
  SList:= TStringList.Create;
  SList.LoadFromStream(MemStream);
  MemStream.Free;
  IniFile:= TMemIniFile.Create('');
  IniFile.SetStrings(SList);

  //tu mozna czytac
  IniFile.ReadSection('a', ListBox1.Items);

  //a moze by jeszcze chcec zapisac
  SList.Clear;
  IniFile.WriteString('sekcja', 'nazwa', 'wartosc');
  IniFile.GetStrings(SList);
  SList.SaveToFile('test.ini');

  SList.Free;
  IniFile.Free;
end;
  1. SHGetSpecialFolderPath z parametrem CSIDL_INTERNET_CACHE
0

Wielkie dzięki Kaziu :D

Ja już sie bawiłem z tworzeniem jednak pliku tymczasowego z wykorzystaniem funkcji GetTempFileName - w tym przypadku chyba jest to na tyle bezpieczne że bez względu na prawa dostępu do zasobów to system przydziela ścieżkę do miejsca gdzie sam może zapisać - dobrze rozumiem? Ale oczywiście Twoje rozwiązanie jest zdecydowanie prostsze ale pytanie o GetTempFileName jest dobre na przyszłość bo czasem trzeba coś tymczasowo zapisać:)

TCHAR tmp_ini_file_name[MAX_PATH];
GetTempFileName(".", TEXT("INI"), 0, tmp_ini_file_name)

CreateFile(...);

WriteFile(...)
...
TIniFile *ini = new TIniFile(tmp_ini_file_name);
...

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