文件操作的一些知識點

一.基本文件操作
char ch[5]="lisi";
const char*pStr=ch;            指向常量的指針
char const *pStr=ch  和上面的效果是一樣的

*pStr='w';//ERROR  指針的內容不可變
pStr="sd";//RIGHT  指針的值可以修改

char * const pStr=ch;          指向指針的常量
  
 *pStr='w';//ERROR  指針的內容可變
pStr="sd";//RIGHT  指針的值可以不可變

fwrite
fopen
fflush----》清空緩存,將緩存的內容進行存儲

fseek

fread

ftell得到文件指針當前的位置
rewind 重新放置文件指針到文件開始處

文件是在計算機內存中以二進制表示的數據,在外部存儲介質上的另一種存放形式。

文件分爲
二進制文件---》包含在ASCII及擴展ASCII字符中編寫的數據或程序指令的文件,一般是可執行程序
文本文件、圖形、圖像、聲音等等文件。
而以二進制方式往文件中寫入數據,則將數據在內存中的存儲形式原樣輸出

 

文本文件也
稱爲ascii文件---》它的每一個字節存放的是可表示爲一個字符的ASCII代碼的文件。
是以行爲基本結構的一種信息組織和存儲方式的文件,可用任何文字處理程序閱讀的簡單文本文件
當我們按照文本方式往文件中寫入數據時,一旦遇到換行字符(ASCII爲10),則會轉換爲回車-換行
(ASCII爲13,10)。在讀取文件時,一旦遇到回車-換行的組合(即連續的ASCII13、10),則會
轉換爲換行字符(ASCII爲10)

0的ASCII爲48

int i =89343;
char ch[5];
1.itoa(i,ch,10);---->將整形轉爲字符集的方式
2.ch[0]=48+8;
ch[1]=48+9;
ch[2]=48+3;
ch[3]=48+4;
ch[4]=48+3;--->第二種存儲方式,不將以上轉換,所存儲的是隻是對於ascii碼的字符,並非我們所想要的

fwrite(ch,1,5,pFile);
fclose(pFile);


ofstream 需要包含<fstream.h>
ifstream
CreateFile
WriteFile
CloseHandle 關閉handle

CFileDialog如何用?
CFile
CFileDialog
文件過濾類型="Text Files(*.txt)/0*.txt/All Files(*.*) /0*.*/0/0";

 CFileDialog fileDlg(TRUE);---->爲true的時候是文件打開對話框
                                       爲false是文件保存對話框
 fileDlg.m_ofn.lpstrTitle="我的文件打開對話框";
 fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)/0*.txt/0All Files(*.*)/0*.*/0/0";
 
 if(IDOK==fileDlg.DoModal())
 {
  CFile file(fileDlg.GetFileName(),CFile::modeRead);
  char *pBuf;
  DWORD dwFileLen;
  dwFileLen=file.GetLength();
  pBuf=new char[dwFileLen+1];
  pBuf[dwFileLen]=0;
  file.Read(pBuf,dwFileLen);
  file.Close();
  MessageBox(pBuf);
 }


WriteProfileString 只兼容16位和cwinapp裏同樣的函數區別是在各種操作系統的時候,存放的地方不一樣
GetProfileString

CString str;
str.GetBuffer();---->將返回一個LPTSTR類型的參數

怎樣操作註冊表?
RegCreateKey
HKEY hey;
RegCreateKey(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",&hey);--->在註冊表下建立一項
RegSetVlaue(hey,NULL,REG_SZ,"zhangsan"),strlen("zhangsan"));----》設定項值 也可以用RegSetVlaueEx設定其他類型的值
RegCloseKey(hey);---》關閉項

LONG lvalue;
RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",NULL,&lvalue);--->讀取註冊表下某一項的值空間
char *pBuf=new char[lvalue];-------》根據空間建立緩衝區
RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sd.df//admin",pBuf,&lvalue);----》填充緩衝
MessageBox(pBuf);獲得值


RegDeleteKey


如何VC字符四則運算?
 char charlist[30];
 for (int i=0;i<25;i++)
 {
      charlist[i]=(char)('z'-i);
 }--------------------------》得到的charlist將是zyxwvutsrqponmlkjihgfedcb內部自動進ASCII碼制的轉換進行運算


vc怎麼樣將字符串賦給字符數組?
strm[100];
strcpy(strm,str);

 

二.文檔的串行化

允許你保存一個對象網絡在一個永久的二進制形式上(通常是磁盤存儲器)
在一個對象刪除後,保持持久性,以後你可以在持久存儲器上加載這一對象,
在內存中重新構建他們使數據持久性的過程叫串行化

CArchive的應用?
寫入數據: 
CFile file("1.txt",CFile::modeCreate|CFile::modeWrite);
 CArchive ar(&file,CArchive::store);
 int i=4;
 ar<<i;

讀取數據:
 CFile file("1.txt", CFile::modeRead);
 CArchive ar(&file,CArchive::load);
 int i=4;
 ar>>i;
 CString s;
 s.Format ("%d",i);
 MessageBox(s);

如何修改文檔標題?
1.在CDoc中OnNewDocument()內SetTitle("我是標題");
2.在String Table裏有個IDR_MANFRAME
CDocTemplate::GetDocString專門獲取IDR_MANFRAME,
IDR_MANFRAME的含義
1)CDocTemplate::windowTitle,主窗口標題欄上的字符串,MDI程序不需要指定,將以IDR_MAINFRAME字符串爲默認值。
2)CDocTemplate::docName,缺省文檔的名稱。如果沒有指定,缺省文檔的名稱是無標題。,當你點擊保存按鈕時顯示的默認文件名稱
(3)CDocTemplate::fileNewName,文檔類型的名稱。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中。如果沒有指定,就不能夠在"File/New"對話框處理這種文件


(4)CDocTemplate::filterName,文檔類型的描述和一個適用於此類型的通配符過濾器。這個字符串將出現在“File/Open”對話框中的文件類型列表框中。要和CDocTemplate::filterExt一

起使用。
(5)CDocTemplate::filterExt,文檔的擴展名。如果沒有指定,就不能夠在“File/Open”對話框中處理這種文檔。要和CDocTemplate::filterName一起使用。
(6)CDocTemplate::regFileTypeId,如果你以::RegisterShellFileTypes向系統的註冊表註冊文件類型,此值會出現在HEY_CLASSES_ROOT之下成爲其子項,並僅供Windows內部使用。如果沒

有指定,這種文件類型就無法註冊。
(7)CDocTemplate::regFileTypeName,這也是存儲在註冊表中的文件類型名稱。它會顯示於程序中用以訪問註冊表的對話框內。

如何串行化一個類?
1.類派生自: public CObject
2.在類裏添加一個宏DECLARE_SERIAL(類名)
3.有個無參數的構造函數
4.類裏聲明重載方法void Serialize( CArchive& archive );
5.類裏在無參的構造函數前添加IMPLEMENT_SERIAL(類名, 基類名稱, 版本號 )保存和讀取時版本號必須相同一個文檔類對象能和多個視類對象相關,一個視類對象只和一個文檔類對象相關.

並且在CPP裏實現方法
void CGraph::Serialize(CArchive& ar)
{
 if(ar.IsStoring())
 {
  ar<<m_nDrawType<<m_ptOrigin<<m_ptEnd;
 }
 else
 {
  ar>>m_nDrawType>>m_ptOrigin>>m_ptEnd;
 }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章