兩種文件修改的方式

一、文件映射

  • 不得不說利用文件映射對文件進行讀寫操作是非常方便的,因爲可以像操作內存一樣使用指針讀寫任意內容,前提是要將安全屬性置爲可讀可寫。利用文件映射進行寫操作時內存和文件時同步的,修改內存內容的同時也會修改文件內容。

  • 使用內存映射文件讀寫文件的具體過程可以這樣:
    (1)調用CreateFile函數打開想要映射的文件,得到文件句柄hFile。該函數是沒有文件時創建問件,有文件時創建問件
    (2)調用CreateFileMapping函數,並傳入文件句柄hFile,爲該文件創建一個內存映射內核對象,得到內存映射文件的句柄hMap。
    (3)調用MapViewOfFile函數映射整個文件或一部分到進程的虛擬地址空間。該函數返回文件映射到內存後的起始地址。使用指向這個地址的指針就可以讀取文件的內容了。調試時可以在內存窗口看一下內容。
    (4)調用UnmapViewOfFile函數來解除文件映射。
    (5)調用CloseHandle函數關閉文件對象,必須傳入內存映射文件句柄hMap
    (6)調用CloseHandle函數關閉文件對象,必須傳入文件句柄hFile。

二、文件指針

  • 要用到的函數
    _open、_lseek、_write,_read和_close
  • 函數的說明
    • _open
      根據文件名打開文件,返回int型的文件句柄,也就是文件描述符。文件描述符是系統內核中文件索引
    • _lseek
      傳入_open返回的int型文件描述符和文件偏移,將文件指針定位到偏移處
    • _read
      傳入文件描述符和字符串指針以及讀取內容大小,將讀取的內容寫進字符串指針指向的字符串中
    • _write
      傳入文件描述符以及源串指針和要寫入的長度,寫入位置爲經由_lseek設置的文件指針定位的地方
    • _close
      傳入文件描述符,關閉文件句柄
  • 函數使用:
    上述幾個函數搭配使用,很簡單。但和文件映射相比,想要查看文件內容的話必須創建字符串來接受文件內容。

三、參考資料

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