正如標題所問,如何使用fopen將數據寫入文件的特定部分,同時按下現有數據而不刪除它。我已經使用fseek和SEEK_SET和SEEK_CUR,到目前爲止,我能夠將新數據寫入文件的正確部分,但現有數據的前幾行被刪除。如何使用fopen將數據寫入文件的特定部分,並將現有數據壓入文件而不刪除它?
1
A
回答
3
您在普通桌面和服務器操作系統上找到的文件系統不支持插入,因此無法完成。
您必須重寫該文件。
3
我必須承認我很少使用fopen
來處理數據的「複雜」操作,並且在文件中間添加東西並不是我經常做的事。通常,當我需要這種使用模式時,我只是用新數據覆蓋整個文件。所以在文件中間添加數據可能是一種聰明的方式,但我不知道:我相當肯定你只能覆蓋。
我能想到的在文件中間追加的最簡單方法如下:找到你需要寫的地方,找到你需要重新定位的字節數,找到要插入的數據的長度,移動寫光標到(需要寫入+長度的位置),使用需要重定位的數據覆蓋該位置的數據,然後編寫您首先需要寫入的內容。
#include <stdio.h>
#include <stdlib.h>
size_t finsert(void* data, size_t length, FILE* fp)
{
const long writePosition = ftell(fp);
fseek(fp, 0, SEEK_END);
const long fileSize = ftell(fp);
const long relocatedDataSize = fileSize - writePosition;
char* dataToRelocate = malloc(relocatedDataSize);
fseek(fp, writePosition, SEEK_SET);
fread(dataToRelocate, relocatedDataSize, 1, fp);
fseek(fp, writePosition + length, SEEK_SET);
fwrite(dataToRelocate, relocatedDataSize, 1, fp);
free(dataToRelocate);
fseek(fp, writePosition, SEEK_SET);
return fwrite(data, length, 1, fp);
}
請注意,您需要讀取和寫入文件的權限,只需寫入不會將其剪切。另外,正如Cole Johnson所提到的,如果您使用的文件「像數據庫」,請考慮使用SQLite。它爲你處理所有這些瘋狂的東西,並使許多事情變得更簡單。
相關問題
- 1. 如何寫入文件而不刪除私密的現有數據
- 2. 將數據寫入文件
- 3. 將數據寫入文件
- 4. 將數據寫入文件
- 5. JDOM將內容寫入現有文件而不刪除
- 6. Fortran - 如何將數據寫入文件中的特定行?
- 7. 如何將數據寫入TXT文件中的特定位置?
- 8. 如何將數據寫入.SLK文件
- 9. 如何將數據寫入xml文件
- 10. 如何將數據寫入XML文件?
- 11. 如何將數據寫入到文件
- 12. 如何將數據寫入Excel文件?
- 13. 如何將數據寫入文件?
- 14. 如何使用JavaScript而不使用ActiveXObject將數據寫入文本文件?
- 15. 如何將數組寫入文本文件而不覆蓋它
- 16. 如何使用flex3創建數據並將其寫入文件?
- 17. 將數據寫入文本文件中的特定位置
- 18. Scrapy不將數據寫入到文件
- 19. NSKeyedArchiver不將數據寫入文件...?
- 20. 不斷將數據寫入文件
- 21. 如何將二進制數據寫入壓縮文件
- 22. 使用QT寫入文件。將數據寫入已寫入文件的特定點
- 23. 將數據寫入文件而不刪除iPhone中的舊內容
- 24. 將數據寫入文本文件
- 25. 創建新的XML文件並將數據寫入它?
- 26. 從文件中提取特定數據並將其寫入另一個文件
- 27. 將數據從文件寫入數組
- 28. 如何使用Matlab將「大數據」寫入文本文件
- 29. 如何使用ANSI格式將數據寫入文本文件
- 30. 如何使用JavaScript將數據寫入文本文件
這聽起來像你正在使用文件的數據庫。請不要爲此使用文件 –