2013-03-21 77 views
0

我在Qt中有我的應用程序的首選項文件。 無論何時啓動應用程序,它都會根據內容相應地加載文件&來創建窗口小部件。我給了用戶一些自定義選項。現在,當我的應用程序關閉時,我正在檢查首選項是否已更改。如果是,那麼我再次打開首選項文件&,然後再次添加所有內容。我沒有創建臨時文件,我直接編輯文件。這種方法是否有效?還是我做錯了?因爲我發現這些線程: 1. What is the best way to edit the middle of an existing flat file?編輯C++中的現有文件

  • http://qt-project.org/forums/viewthread/25924/
  • 應該使用我二進制文件?目前我正在使用ASCII文件。 謝謝。

    更新:在正確答案上面的計算器環節都有

    如果您正在使用平板卡住,那麼你正在使用更新它們

    我的老式 方式卡住意思是詢問我使用的方法是否過時&現在有沒有更好的方法? &平面文件是什麼意思?

    回答

    2
    1. 不要嘗試編輯該文件。重寫整個東西
    2. 通過使用臨時文件進行重寫。即將偏好的當前狀態寫入臨時文件。然後在確保臨時文件已成功寫入後,將文件移動/重命名爲您的實際首選項文件。這有助於在重寫文件時發生崩潰。如果你直接重寫它,你將不會留下舊的或新的。如果你通過一個臨時文件來做,那麼這樣做可以確保在發生崩潰的情況下,你至少有一個很好的首選項文件(儘管它包含舊的首選項)。
    3. 文本/二進制文件沒有太大的區別,除非它是一個非常龐大的文件。文字將有助於手動編輯它,如果需要的話。
    +0

    更新了問題。 – 2013-03-21 12:07:27

    +0

    或多或少顯而易見,但是......不要忘記確保新寫入的文件在擦除舊文件並重命名新文件之前已成功寫入。 (只需檢查結束後的狀態。) – 2013-03-21 12:13:43

    +0

    不要刪除舊文件,因爲跟蹤文件的軟件將得到一個worng刪除/新通知,而不是一個更改。將舊文件複製到某處,然後在現有文件上寫入。 – RedX 2013-03-21 12:13:46

    0

    這是一個完美的做法。由於您已將所有首選項加載到內存中,並且您已在其中編輯它們,因此不需要打擾臨時文件(除非在編寫期間程序出現故障時要確保安全)。只需將所有首選項寫回原始文件。

    您是否選擇二進制文件或文本文件取決於您。偏好往往是文本文件,因爲它們只有文本編輯器才具有人類可讀的優點,而不是用於查看它們的專用軟件。然而,由於解碼更簡單,二進制文件可能具有稍好的性能。

    +0

    更新了問題。 – 2013-03-21 12:07:01

    +0

    您仍然需要臨時文件,否則,您可能會輕鬆地丟失數據。 – 2013-03-21 12:16:09

    +0

    @JamesKanze我同意。我的意思是,他們不需要像鏈接答案所表明的那樣使用臨時文件,因爲他們在寫入文件的同時解析文件。 – 2013-03-21 12:17:28