【自我學習】文字檔案儲存相關
阿新 • • 發佈:2021-01-20
在ADS-B專案中,涉及到文字檔案的儲存,需要將接收的訊號通過文字檔案的形式儲存起來,在這裡涉及到相關函式。
1.fopen()函式
fopen()函式用於檔案的儲存與讀取,函式宣告:
FILE *fopen(const char *filename, const char *mode)
filename – 包含了要開啟的檔名稱
mode --包含了檔案訪問模式,模式如下:
mode | describe |
---|---|
‘r’ | 開啟檔案,讀取檔案 |
‘w’ | 建立一個用於寫入的空檔案。如果檔名稱與已存在的檔案相同,則會刪除已有檔案的內容,檔案被視為一個新的空檔案。 |
‘a’ | 追加到一個檔案。寫操作向檔案末尾追加資料。如果檔案不存在,則建立檔案。 |
‘r+’ | 開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。 |
‘r+’ | 開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。 |
‘r+’ | 開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。 |
用法:
FILE *fp;
fp = fopen(filename,"a");
fprintf(fp, "L ICAO %s latitude %4.4f longitude %4.4f altitude %6.0f \n",Aircraft_ID,lat,lon,alt);
fclose(fp);
2.時間讀取
為了方便文字文件的儲存,可以利用#include <time.h>函式庫,根據系統時間對文字進行命名。
time_t t;//time_t 這種型別就是用來儲存從1970年到現在經過了多少秒
struct tm * lt;
time (&t);//獲取Unix時間戳。
lt = localtime (&t);//轉為時間結構。
tm結構體詳解
struct tm
{
int tm_sec; /* 秒–取值區間為[0,59] */
int tm_min; /* 分 - 取值區間為[0,59] */
int tm_hour; /* 時 - 取值區間為[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */
int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
int tm_year; /* 年份,其值從1900開始 */
int tm_wday; /* 星期–取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; /* 從每年的1月1日開始的天數–取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
int tm_isdst; /* 夏令時識別符號,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/
long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/
const char *tm_zone; /*當前時區的名字(與環境變數TZ有關)*/
使用結構體中的年月日時分作為文字文件命名。
3.sprintf()函式
sprintf()函式傳送格式化輸出到 str 所指向的字串,函式宣告:
int sprintf(char *str, const char *format, ...)
與printf類似:
str – 這是指向一個字元陣列的指標,該陣列儲存了 C 字串。
format – 這是字串,包含了要被寫入到字串 str 的文字。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加引數中指定的值替換,並按需求進行格式化
使用:
char filename[64];
sprintf(filename,"%d_%d_%d_%d_%d.txt",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min);
定義文件名,由tm結構體中得到的年月日命名文件,再使用fopen()函式即可完成儲存工作。
4.程式碼
#include<stdio.h>
#include<time.h>
int main()
{
FILE *fp;
time_t t;
struct tm * lt;
char filename[64];
time (&t);//獲取Unix時間戳。
lt = localtime (&t);//轉為時間結構。
sprintf(filename,"%d_%d_%d_%d_%d.txt",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min);
fp = fopen(filename,'a');
fprintf(fp, "test %d\n",tm_sec);
fclose(fp);
}
致謝:
https://www.runoob.com/cprogramming/c-function-fopen.html
https://www.runoob.com/cprogramming/c-function-sprintf.html
https://blog.csdn.net/csghydiaoke/article/details/8435010
https://blog.csdn.net/qq_36754364/article/details/108873801