2013-02-11 20 views
2

我是Qt新手,我正在學習其Getting Started頁面。我想知道下面的陳述意味着什麼,它們爲什麼需要?「file.open(QIODevice :: ReadOnly)」是什麼意思?

在開放功能:

if (!file.open(QIODevice::ReadOnly)) { 

    QMessageBox::critical(this, tr("Error"), tr("Could not open file")); 

    return; 
} 

在保存功能

另外:

if (!file.open(QIODevice::WriteOnly)) { 
      // error message 
} 

我無法在沒有這些線路上運行這些功能。我嘗試閱讀文檔中的錯誤處理,但無法準確找到這些語句的含義。

回答

3

您可以打開文件進行閱讀和寫作。使用QIODevice::WriteOnlyQIODevice::ReadOnly標誌,您可以指定打開特定文件的模式。

但是,它爲什麼重要?

假設您在不同程序的多個實例中打開了一個文件,並且沒有指定文件模式這樣的事情。現在,如果每個文件都在讀取文件 - 因爲它們都有不同的指向文件當前位置的指針 - 這不是問題 - 因爲所有程序都會從​​文件中獲取最新且正確的信息。但是,如果只有一個程序將文件寫入文件 - 數據將不一致,所以其他程序可能會讀取錯誤的數據。

直觀的方法是將消息發送到附加在此文件上的所有程序,以便它們可以自行更新。但是 - 如果文件被刪除怎麼辦?或者如果沒有可能在新數據中設置適當的位置?此外,每個程序現在都需要有接口才能得到通知,並且整個消息傳遞的想法可能非常緩慢(除了它不起作用)。

所以 - 只有共識 - 多個程序可以打開文件進行閱讀 - 因爲它們都具有相同和一致的數據。但是,如果只有一個程序向操作系統發出信號,說明它想獲得寫入權限 - 該文件不能在任何程序中打開 - 也不能讀取 - 也不能寫入!根據實現,操作系統可能會阻止調用者,直到所有文件關閉,或者它可以忽略該調用並將錯誤信息發送給調用者 - 這通常是一個更好的主意,因爲程序(或用戶)可以阻止自己並稍後再試,或者它可以簡單地要求用戶保存到另一個目的地,或者它可以向我們發送令人毛骨悚然的錯誤消息 - 但它不能寫入文件。

最後一段描述了所謂的多讀者 - 單寫作者技術,因此您可能需要在互聯網或併發課程教科書上查找它。

+0

感謝您的回覆。所以我認爲qt已經有必要包含這個檢查以符合規則。那是對的嗎? – Vijay 2013-02-12 02:53:53

+0

@Vijay這個檢查本身並不是必須的,但是在沒有檢查的情況下嘗試使用Qt應用程序編寫文件,同時在Excel中打開相同的文件,例如 - 您的程序在首次寫入時會崩潰。 – 2013-02-12 10:46:19

+0

好的..謝謝! :) – Vijay 2013-02-13 19:12:48