回答
這取決於你在做什麼。讀取和寫入打開可能難以得到正確和一致性,因爲它非常容易意外截斷文件或無意中覆蓋部分數據。
如果讀取然後寫入(大概是一個完整的替換)實際上是一個選項,那麼兩個單獨的文件打開可能會更簡單,但考慮寫入一個新文件並重新命名,如果成功,以確保如果某件事編程錯誤!)中斷寫入舊數據不會丟失。
如果您決定打開以進行讀取/寫入,請務必仔細閱讀文檔,以便在打開時不截斷文件並注意查找和講述功能。除非以二進制模式打開,否則只能安全地通過尋找前一個指令返回的位置。
速度。
但這取決於你在做什麼。
如果你要寫很多小東西,最好保持開放。
如果你要寫一大塊數據,那麼每次需要時加載它(可能是更好)。
閱讀也是如此。
我會建議最有可能的原因是比賽條件。
假設兩個用戶將訪問同一個文件並對其進行編輯。用戶A打開文件,讀入並關閉文件。用戶B在用戶A有機會寫入之前出現,並且他還讀取該文件。
現在,如果用戶A已將文件打開,用戶B無法訪問它進行讀取。在許多情況下,這是所希望的行爲,因爲它避免了任何可能的競爭條件。在用戶A完成之前,用戶B不能訪問該文件。
另外,讓我們假設用戶A和B不會重寫文件中的任何內容,但只能附加到它,並且它們這樣做的順序並不重要(日誌記錄就是一個很好的例子)。在這種情況下,在用戶A寫入之前讓用戶B訪問文件是有意義的,因爲用戶B可能不關心用戶A當前正在做什麼。
很顯然,這兩種情況都與您想如何處理競爭條件有關,所以您應該首先考慮這個問題。通常阻止行爲會阻止競爭條件傷害你的程序,所以我會默認這種行爲,但要注意替代方法。
由於沒有人提到過它,我會明顯地去 - 因爲你想讀取和同時寫入文件。
考慮一些類似於ISAM文件的地方,您希望讀取,添加,刪除,替換各種偏移處的記錄,更新索引等。通過尋找適當的位置而無需打開和關閉文件,可以輕鬆完成更多操作!
需要採取如果你打開文件進行讀取和寫入的照顧另一件事是,你需要刷新你的流,同時讀取和寫入操作
- 1. 打開python文件夾中的多個文件進行讀/寫
- 2. 兩個進程打開同一個文件進行寫入
- 3. 打開一個文件進行編輯
- 4. 打開文件進行共享寫
- 5. 如何用PHPExcel打開Excel文件進行讀寫操作?
- 6. 打開的文件只讀取一行
- 7. 編寫一個批處理文件,打開一個鉻URL
- 8. 讀變到一個打開的文件
- 9. 如何寫一個批處理文件來打開文件夾中的文件
- 10. 打開一個Windows文件目錄在c中讀取/寫入
- 11. 打開兩個文件進行比較
- 12. 收縮文件打開在讀/寫
- 13. 爲閱讀和寫作打開文件?
- 14. 寫入大文件:打開一次,或重新打開每個寫入事件?
- 15. 如何寫一個「讀者友好」的sessionInfo()到文本文件
- 16. Laravel郵件Swift_IoException無法打開文件進行讀取
- 17. 如何通過msword/pdf等應用程序打開文件以進行讀寫?
- 18. 雨燕2.2的Linux - 打開文件進行讀取
- 19. 閱讀一個大文件vs打開數千個文件
- 20. 閱讀和分裂一個.raw文件進行數據處理
- 21. 我可以運行一個批處理文件,當我打開
- 22. 讀寫同一個文件
- 23. 從寫在一個文本文件的路徑打開一個文件?
- 24. 是否可以讀取和寫入文件只打開一次?
- 25. python3打開文件和讀取行
- 26. 如何讀取csv文件,單獨進行進一步處理
- 27. 無法打開文件進行讀取:權限被拒絕
- 28. C#無法打開文件進行讀取
- 29. 如何使用Scrapy打開文件流進行閱讀?
- 30. 使用UTF-8打開文件進行讀取
之間切換提到沒有操作系統,所以它可能是值得一提的是, Windows默認鎖定打開的文件以防止併發訪問,但類Unix系統不會。 – SimonJ 2009-11-25 21:00:56
有很多機制來支持鎖定(儘管你是對的,默認情況下不會),顯然在非鎖定的情況下,你必須使用dnotify機制(linux 2.4+)來處理競爭條件。 – tzenes 2009-11-25 21:06:55