C MySQL導出到文件怎么打開?
在開發過程中,有時需要把C程序中的MySQL查詢結果導出到文件中,但是導出后的文件如果直接打開會出現亂碼的情況。所以需要在打開文件時加入一些處理操作。
下面是示例代碼:
#include#include #include #define FILENAME "result.txt" int main() { FILE *fp; MYSQL mysql; MYSQL_RES *result; MYSQL_ROW row; mysql_init(&mysql); if (!mysql_real_connect(&mysql,"localhost","root","","test_db",0,NULL,0)) { printf("cannot connect to database: %s\n",mysql_error(&mysql)); exit(1); } if (mysql_query(&mysql,"SELECT * FROM student")) { printf("Cannot execute SQL query: %s\n",mysql_error(&mysql)); exit(1); } result = mysql_store_result(&mysql); fp = fopen(FILENAME, "w"); if (fp == NULL) { printf("Cannot open file %s\n", FILENAME); exit(1); } while ((row = mysql_fetch_row(result))) { fprintf(fp, "%s\t%s\n", row[0], row[1]); } fclose(fp); mysql_free_result(result); mysql_close(&mysql); // 打開文件并進行處理 fp = fopen(FILENAME, "r"); if (fp == NULL) { printf("Cannot open file %s\n", FILENAME); exit(1); } char buf[1024]; int len; // 讀取文件內容到buf中 len = fread(buf, sizeof(char), sizeof(buf), fp); fclose(fp); // 統計文件中的中文字符數 int chineseCount = 0; for (int i = 0; i< len - 1; i++) { if ((buf[i] & 0x80) && (buf[i + 1] & 0x80)) { // 如果是中文字符,ASCII碼高位都是1 chineseCount++; i++; } } printf("The file has %d Chinese characters.\n", chineseCount); return 0; }
代碼中的“result.txt”是要導出的文件名。在寫入數據后,我們用fopen函數將文件以只讀方式再次打開,然后把文件內容讀入到buf中,最后統計buf中中文字符的個數。注意要在二進制模式下讀寫文件,這樣可以防止在不同操作系統上的兼容問題。