我有一個C函數,它將一些數據寫入文本文件。數據由浮點數,整數和字符串組成。 它看起來是這樣的:將文本或二進制數據寫入單個C函數
writeAsTextFile( mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName);
這樣做我用調用fprintf中;
現在我想寫的相同的數據,但二進制。我可以編寫第二個函數writeAsBinaryFile,並使用調用fwrite來代替。但是,每次我將改變mystruct_t的設計,我將不得不修改writeAsTextFile和writeAsBinaryFile。當然還有相應的readAsTextFile和readAsBinaryFile。最重要的是這將增加代碼量。 因此,我想有一個箱子,或文本參數一個單一的通用函數,應該是這樣的:
writeToFile(mystruct_t* myStructWithIntsFloatsAndStrings , const char* fileName, myEnumType_t eOption)
其中選擇將是一個枚舉EBIN = 0和eTxt = 1的實例。根據eOption,該函數將寫入二進制或文本數據。
我不知道什麼是最好的方式來實現這一點。我是否也應該使用fwrite寫作文本,我應該嘗試使用宏嗎? (我已經看到使用##指令的地方,但從來沒有使用它),或切換/ ifs聲明無論我需要寫入文件?或者我應該寫一個通用函數,如 myWriteFunction(void *data, char const type, myEnumType_t eOption)
這將被writeToFile調用嗎?
我不是很熟悉使用FREAD/FWRITE和宏,以便任何的最佳做法的意見,想法等是值得歡迎的,
感謝
巴巴
當您處於設計數據文件的模式時,您是否考慮過像JSON或XML這樣更通用的東西?然後所有寫入都是文本寫入。您幾乎可以在任何其他編程環境中閱讀您的文件,並且不會比現在正在做的更多工作。站在走在你面前的巨人的肩膀上。 – dawg 2010-10-02 02:53:03