自己動手寫類似酷狗播放器(5)_檔案的儲存和讀取
對於播放器,我們希望在開啟的時候,播放列表存有上一次的歌曲,不必每次去新增,就是通過檔案的操作實現的。
這裡要實現兩個:
1.在播放器開啟的時候,能自動載入上一次的歌曲資訊進入Listbox,並且更新歌曲資訊庫
2.關閉的時候,能儲存關閉前的播放列表和歌曲總數
1.c語言中檔案的操作
在C語言的標準庫函式中,有直接對檔案操作的,對檔案的操作
先總結下:輸入輸出流的問題
在控制檯程式中,我們的輸出put和輸入get。都是對於列印終端而言的。比如putchar(ch)向螢幕終端輸出一個字元ch。getchar從螢幕終端獲得一個字元。所以Put有關的就是 輸出到哪裡,可以是終端,可以是檔案,和get關的就是從哪裡get。可以從終端,可以從檔案。
操作檔案步驟:
1.開啟檔案
FILE fp;
if(fp=FileOpen("路徑",”rb“)==NULL)
MessageBox(hwnd,TEXT(”檔案開啟失敗“),"error",MB_OK);
2.訪問檔案
fputc(ch,fp), ch=fgetc(fp)
fprintf(fp,”%d”,ch);將ch字元已十進位制的形式存入f指向的檔案
fscanf(fp,“%d”,&i)從檔案中取得一個字元 並格式為整形存入變數i中
fwrite(buffer,size,count,fp) 向檔案寫入一塊資料結構體資料…
fread(buffer,size,count,fp) 從結構體或者塊資料得到資料
3.關閉檔案
fclose(檔案指標)
fclose(fp) 成功返回0,否則返回EOF(-1)
4.檔案狀態
feof(fp):是否到檔案最後一行 ,是的話返回為真
while(!feof(fp))來判斷是否訪問檔案結束
2.播放器中的應用
在播放器中,我們要做的就是在開啟播放器時,在初始化函式中,自動將一次存到硬碟的歌曲檔案資訊插入到Listbox播放列表中,並且更新歌曲庫,在退出播放器的時候,要把當前播放列表中的歌曲載入到硬碟檔案,重新更新下該存檔文字。這裡因為是對大塊資料的操作,故用 fwrite(),fread()兩個函式來操作。
下面程式碼演示如何初始化時候載入:
BOOL LoadFileInfo(HWND hwnd,FileInfo *fileinfo) //向全域性變數載入歌曲資訊
{
FILE *fp;
if((fp=fopen("C:\\musicplay_songinfo.ini","rb"))==NULL)
{ MessageBox(hwnd,TEXT("開啟上一次儲存歌曲列表錯誤"),TEXT("error"),MB_OK);
return FALSE;
}
fscanf(fp,"%d",&isong); //得到歌曲總數
for(INT i=0;i<isong;i++) //檔案沒有到最後一行
{ if(fread(&fileinfo[i],sizeof(FileInfo),1,fp)!=1)
{
MessageBox(hwnd,TEXT("寫入檔案錯誤"),"",MB_OK);
return FALSE;
}
TCHAR withnum_pure[100];
OutWithNumSongName(i,fileinfo[i].songname,withnum_pure);
ListBox_InsertString(hlistbox,-1,withnum_pure);
}
fclose(fp); //記住要關閉檔案
return TRUE;
}
下面程式碼演示如何儲存歌曲檔案
BOOL SaveFileInfo(HWND hwnd,FileInfo *fileinfo) //儲存檔案到 C:\\上
{
FILE *fp;
if((fp=fopen("C:\\musicplay_songinfo.ini","wb"))==NULL)
{ MessageBox(hwnd,TEXT("開啟檔案錯誤"),"",MB_OK);
return FALSE;
}
fprintf(fp,"%d",isong); //將isong格式化到fp指向的檔案中
for(INT i=0;i<isong;i++)
{ if(fwrite(&fileinfo[i],sizeof(FileInfo),1,fp)!=1)
{
MessageBox(hwnd,TEXT("寫入檔案錯誤"),"",MB_OK);
return FALSE;
}
}
fclose(fp); //記住要關閉檔案
return TRUE;
}
相關文章
- 自己動手寫類似酷狗播放器(2)_音樂播放模組實現播放器
- 自己動手寫類似酷狗播放器(3)_Slider控制元件使用播放器IDE控制元件
- 自己動手寫類似酷狗播放器(4)_滑鼠右鍵選單的新增播放器
- 自己動手寫類似酷狗播放器(4)_系統托盤的顯示播放器
- 自己動手寫類似酷狗播放器(6)_UI初步改善_新增背景色播放器UI
- 自己動手寫類似酷狗播放器(1)_建立一個基於對話方塊模板播放器
- java mysql儲存和讀取檔案JavaMySql
- python讀取檔案——python讀取和儲存mat檔案Python
- (slam工具)1檔案讀取和儲存SLAM
- Python -讀取,儲存檔案Python
- Java讀取以.xlsx結尾的excel檔案,並寫出每張表對應的c#類、java類、儲存資料的xml檔案、讀取xml檔案的工具類JavaExcelC#XML
- Android儲存讀取txt檔案Android
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- csv檔案的寫入和讀取
- golang 讀取切分儲存byte流檔案Golang
- Python讀取、儲存、檢視.mat檔案Python
- IO流-檔案的寫入和讀取
- C#讀取文字檔案和寫文字檔案C#
- 讀取和儲存Excel表Excel
- list集合、txt檔案對比的工具類和檔案讀寫工具類
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- sql 2k中的圖片儲存和獲取----引申到檔案儲存和獲取 (轉)SQL
- python檔案建立、讀取和寫入Python
- 如何讀取和寫入JSON檔案JSON
- Python之檔案讀取和寫入Python
- 【MATLAB】讀取和寫入文字檔案Matlab
- 注入mssql後使用儲存過程讀寫任意檔案SQL儲存過程
- Python中檔案讀取與儲存程式碼示例Python
- Android內部儲存和外部儲存,以及讀取Android讀取RAM,ROM內部儲存和外部儲存卡容量Android
- Redis資料儲存和讀寫Redis
- 使用HTML5 IndexDB儲存影象和檔案HTMLIndex
- Javascript寫入txt和讀取txt檔案示例JavaScript
- 讀取檔案流並寫入檔案流
- v1.9.1 進行中:MQTT X CLI 支援自動重連及儲存和讀取本地檔案MQQT
- 如何獲取HDFS上檔案的儲存位置
- 通用的config檔案讀取類
- 塊儲存 檔案儲存 物件儲存物件
- VsCode讀取專案檔案的Eslint規則 儲存時自動修復格式錯誤VSCodeEsLint