Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    QSettings verify if file exists

    General and Desktop
    5
    13
    14190
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • V
      vezprog last edited by

      You could do as koahnig said by checking if the parameter exists by setting a default value, or you can use QFile to see if the actual file exists on the file system.

      @
      if (QFile(fileName).exists())
      qDebug() << "File exists";
      else
      qDebug() << "File does not exist";
      @

      1 Reply Last reply Reply Quote 0
      • E
        Exotic_Devel last edited by

        I can not use default values​​. Parameters such as username, password, ip-host, must be entered by the user in the first run of the application.
        Connection parameters are generally dynamic, ie depend user

        1 Reply Last reply Reply Quote 0
        • E
          Exotic_Devel last edited by

          I still do not understand how the file is named, for example:

          @void MainWindow::writeSettings()
          {
          QSettings settings("Moose Soft", "Clipper");

          settings.beginGroup("MainWindow");
          settings.setValue("size", size());
          settings.setValue("pos", pos());
          settings.endGroup();
          

          }
          @

          What is the filename?

          [quote author="dvez43" date="1407786276"]You could do as koahnig said by checking if the parameter exists by setting a default value, or you can use QFile to see if the actual file exists on the file system.

          @
          if (QFile(fileName).exists())
          qDebug() << "File exists";
          else
          qDebug() << "File does not exist";
          @[/quote]

          1 Reply Last reply Reply Quote 0
          • A
            andreyc last edited by

            [quote author="Exotic_Devel" date="1407786830"]What is the filename?[/quote]
            I think it will be hard to find a file name for QSettings because it uses different files on "different systems":http://qt-project.org/doc/qt-5/QSettings.html#platform-specific-notes

            [quote author="Exotic_Devel" date="1407786512"]I can not use default values​​. Parameters such as username, password, ip-host, must be entered by the user in the first run of the application.
            Connection parameters are generally dynamic, ie depend user[/quote]

            In addition to koahnig suggestion. You can use "QSettings::contains()":http://qt-project.org/doc/qt-5/qsettings.html#contains to check if key exists. And if it does not then emit a signal to request user input. When user enter the data write it to QSettings and next time you will read it.

            1 Reply Last reply Reply Quote 0
            • E
              Exotic_Devel last edited by

              In

              @QSettings settings("MooseSoft", "Clipper");
              if(settings.contains("anykey"))
              qDebug("yes");
              else
              qDebug("no");@

              Clipper.conf is automatically created if does not exist?

              1 Reply Last reply Reply Quote 0
              • K
                koahnig last edited by

                [quote author="Exotic_Devel" date="1407791525"]In

                @QSettings settings("MooseSoft", "Clipper");
                if(settings.contains("anykey"))
                qDebug("yes");
                else
                qDebug("no");@

                Clipper.conf is automatically created if does not exist?[/quote]

                The location, filename and/or format are OS dependent. However, in general QSettings ensures that the information is stored.
                Not sure, if a file wil be created when no entry has been set, but that is irrelevant anyway.

                Either you are using Andreyc's suggestion with contains or you may use an empty default string. When the return value is empty you know also that the parameter was not found.

                As a remark to filenames. On windows you may store the information in registry. Therefore, the file name check is not always portable.

                Vote the answer(s) that helped you to solve your issue(s)

                1 Reply Last reply Reply Quote 0
                • E
                  Exotic_Devel last edited by

                  In my settings file, keys exist concerning the parameters of a connection to the database, ie, host, user, password, ...
                  In that case I would have to choose one of these keys to see if the file exists.
                  Bothers me that deciding whether a file exists based on the location of a key. The file can be there, but the key is incorrect.
                  I find it strange define whether a file exists analyzing its contents.
                  This should be done seeking the binary file, if conf or ini or another file is there, then the file exists.
                  QSettings should have a existsFile () method, which would return true if the file exist in the directory.

                  @ QSettings settings("MooseSoft", "Clipper");
                  if(settings.existsFile())
                  qDebug("yes");
                  else
                  qDebug("no");
                  @

                  1 Reply Last reply Reply Quote 0
                  • A
                    andreyc last edited by

                    [quote author="Exotic_Devel" date="1407846882"]QSettings should have a existsFile () method, which would return true if the file exist in the directory.[/quote]

                    Let me quote a previous answer :-)

                    [quote author="koahnig" date="1407833743"] As a remark to filenames. On windows you may store the information in registry. Therefore, the file name check is not always portable. [/quote]

                    On some OS all settings are in one storage, which can be spread among several files. So the file always exists regardless of an application settings like registry in Windows.

                    [quote author="Exotic_Devel" date="1407846882"]Bothers me that deciding whether a file exists based on the location of a key. The file can be there, but the key is incorrect.
                    I find it strange define whether a file exists analyzing its contents.
                    This should be done seeking the binary file, if conf or ini or another file is there, then the file exists.[/quote]

                    You don't need to decide if file exists. You need to decide if a particular key-value pair exists. And if it does not then ask user about the value.
                    If the value exists but incorrect then you try to use stored credentials and then ask user if the credentials are incorrect.

                    1 Reply Last reply Reply Quote 0
                    • M
                      msue last edited by

                      In case you want to see it written somewhere anyway, with QSettings settings("MooseSoft", "Clipper"):

                      • On Linux it will will written to the file ~/.config/MooseSoft/Clipper.conf
                      • On Windows it will be written to the registry: HKEY_CURRENT_USER\Software\MooseSoft\Clipper
                      1 Reply Last reply Reply Quote 0
                      • E
                        Exotic_Devel last edited by

                        Here is the solution that I created

                        @QHash DataAccess::readSettings()
                        {
                        QSettings connecsettings( QSettings::IniFormat, QSettings::SystemScope, "Freedom", "TecTracker");

                        QHash<QString, QString> paran;

                        connecsettings.beginGroup("Connection");

                        if(!connecsettings.contains("host"))
                        writeSettings(&connecsettings);

                        paran.insert("host", connecsettings.value("host", "127.0.0.1"));
                        paran.insert("port", connecsettings.value("port", 5432).toString());
                        paran.insert("database", connecsettings.value("database"));
                        paran.insert("user", connecsettings.value("user", "postgres"));
                        paran.insert("passw", connecsettings.value("passw", "postgres"));

                        connecsettings->endGroup();

                        return paran;
                        }@

                        Is it?

                        Is there a more practical way to pass these parameters for a QHash?

                        Is there any container that works with mixed types, in order to avoid conversions?

                        1 Reply Last reply Reply Quote 0
                        • K
                          koahnig last edited by

                          Possibly you could store QVariant directly, if like that.

                          @
                          QHash < QString, QVariant > paran;

                          paran.insert("host", connecsettings.value("host", "127.0.0.1"));
                          paran.insert("port", connecsettings.value("port", 5432));
                          paran.insert("database", connecsettings.value("database"));
                          paran.insert("user", connecsettings.value("user", "postgres"));
                          paran.insert("passw", connecsettings.value("passw", "postgres"));
                          @

                          However, you will have to convert later on. Personally, I would leave it as is.

                          Vote the answer(s) that helped you to solve your issue(s)

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post