• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapis ustawień programu do pliku *.ini C++

Object Storage Arubacloud
0 głosów
816 wizyt
pytanie zadane 2 stycznia 2016 w C i C++ przez Driver511 Nowicjusz (190 p.)
edycja 2 stycznia 2016 przez Driver511

Witam.

Mam problem związany z zapisem ustawień do pliku ini, a dokładniej:

Jak program się uruchomi i go zamknę to plik normalnie się zapiszę, lecz gdy otwieram plik w programie przez OpenDialog1 do Memo1 lub jak zapisuje plik przez SaveDialog1 to plik ten się nie zapisuje.

Proszę o pomoc.

Tutaj dodaje kod, który mam w programie z dodatkiem biblioteki registy.hpp

#include <registry.hpp>

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        if (Form1->OpenDialog1->Execute())
        {
                try
                {
                        Form1->Memo1->Lines->LoadFromFile(Form1->OpenDialog1->FileName);
                }

                catch(...)
                {
                        ShowMessage("Wystąpił błąd podczas otwierania pliku. Sprawdź czy plik znajduje się  na dysku.");
                        Form1->Memo1->Lines->Clear();
                }
        }
}

//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        TIniFile* ini = new TIniFile(GetCurrentDir() + "\\settings.ini");
        Left = ini->ReadInteger("Main", "Left", 350);
        Top = ini->ReadInteger("Main", "Top", 350);
        Width = ini->ReadInteger("Main", "Width", 650);
        Height = ini->ReadInteger("Main", "Height", 450);
        delete ini;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
        TIniFile* ini = new TIniFile(GetCurrentDir() + "\\settings.ini");
        ini->WriteInteger("Main", "Left", Form1->Left);
        ini->WriteInteger("Main", "Top", Form1->Top);
        ini->WriteInteger("Main", "Width", Form1->Width);
        ini->WriteInteger("Main", "Height", Form1->Height);
        delete ini;
}
//---------------------------------------------------------------------------

Dodam też, że zauważyłem ze jak program włączę i wyłączę to plik settings.ini się zapisuje, a jak otworze jakiś plik lub go zapiszę np. na pulpicie to plik settings.ini zapisze się na pulpicie co powoduje, że program wraca do poprzednich ustawień, gdyż wczytuje on plik ini zapisany w folderze programu.

Jak tą linijkę kodu:

TIniFile* ini = new TIniFile(GetCurrentDir() + "\\settings.ini");

zastąpię w ten sposób

TIniFile* ini = new TIniFile("settings.ini");

To plik settings.ini zapisuje się gdzieś w na dysku C, że ciężko go znaleść.

Myślę że funkcja GetCurrentDir() pamięta ostatni wybrany folder, w tym przypadku np. pulpit i tam zapisuje plik ini. 

Czy jest jakieś wyjście z tego problemu lub czy istnieje jakaś inna funkcja, która za każdym razem zapisze ini do folderu z programem?

1 odpowiedź

+1 głos
odpowiedź 2 stycznia 2016 przez jeremus Maniak (59,720 p.)
wybrane 3 stycznia 2016 przez Driver511
 
Najlepsza
użyj ExtractFilePath(ParamStr(0))

wynik tej funkcji zawiera już "\\" na końcu
komentarz 3 stycznia 2016 przez Driver511 Nowicjusz (190 p.)

Dziękuje.

Teraz wszystko działa tak ja powinno smiley

Podobne pytania

0 głosów
1 odpowiedź 2,265 wizyt
pytanie zadane 4 lutego 2018 w C i C++ przez Username Obywatel (1,350 p.)
0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 24 grudnia 2015 w C i C++ przez Pascal Bywalec (2,720 p.)
0 głosów
0 odpowiedzi 203 wizyt
pytanie zadane 14 lipca 2021 w PHP przez klemens997 Nowicjusz (160 p.)

92,565 zapytań

141,416 odpowiedzi

319,598 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...