1. 程式人生 > 其它 >作業系統實驗7 無緩衝方式實現檔案讀寫

作業系統實驗7 無緩衝方式實現檔案讀寫

技術標籤:課程學習記錄

實驗7 無緩衝方式實現檔案讀寫

一、實驗目的

(1)熟悉Windows系統檔案讀\寫相關API。
(2)掌握無緩衝方式實現檔案讀\寫相關引數的設定。

二、實驗準備

 CreateFile( )        檔案建立:用於建立一個新檔案,如果檔案已經存在,則得到該檔案的控制代碼。
 Readfile( )          讀檔案:從檔案指標指示的位置開始讀取檔案中的資料
 WriteFile ( )        寫檔案:將資料寫入檔案
 CloseHandle()        關閉檔案控制代碼:關閉與檔案相關的控制代碼,其作用與釋放動態申請的記憶體空間類似,
                      這樣可以釋放系統資源,使程序安全執行。

三、實驗內容

(一)實驗內容

  建立一個函式,使用該函式將原始檔source.txt中的內容讀出,再寫到目標檔案nobuffer.txt中去。

(二)主要程式碼

// zuoye07.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "zuoye07.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__
; #endif DWORD BufferSize=1024; char buf[1024]; / // The one and only application object CWinApp theApp; using namespace std; void FileReadWrite_NoBuffer(char*source,char*destination); int _tmain(int argc,TCHAR*angv[],TCHAR*envp[]) { int nRetCode=0; printf("Call FileReadWrite_NoBuffer!\n")
; //呼叫FileReadWrite_NoBuffer(char*source,char*destination)函式 FileReadWrite_NoBuffer("source.txt","nobuffer.txt"); return nRetCode; } void FileReadWrite_NoBuffer(char*source,char*destination) { HANDLE handle_src,handle_dst; DWORD NumberOfByteWrite; bool cycle; char*buffer; buffer=buf; //建立檔案source.txt handle_src=CreateFile(source, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_FLAG_NO_BUFFERING, NULL); //建立檔案nobuffer.txt handle_dst=CreateFile(destination, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, NULL, NULL); //判斷檔案是否建立失敗,若失敗列印輸出提示資訊並退出 if(handle_src==INVALID_HANDLE_VALUE || handle_dst==INVALID_HANDLE_VALUE) { printf("File Create Fail!\n"); exit(1); } cycle=true; while(cycle) { NumberOfByteWrite=BufferSize; //讀取檔案source.txt if(!ReadFile(handle_src,buffer,NumberOfByteWrite,&NumberOfByteWrite,NULL)) { //讀取檔案source.txt失敗 printf("Read File Error!%d\n",GetLastError()); exit(1); } if(NumberOfByteWrite<BufferSize)cycle=false; //寫入檔案nobuffer.txt if(!WriteFile(handle_dst,buffer,NumberOfByteWrite,&NumberOfByteWrite,NULL)) { //寫入檔案nobuffer.txt失敗 printf("Write File Error!%d\n",GetLastError()); exit(1); } } //關閉檔案控制代碼(source.txt,nobuffer.txt) CloseHandle(handle_src); CloseHandle(handle_dst); }

四、實驗結果與總結

    一開始沒有建立source.txt和nobuffer.txt,程式第一次執行後會建立這兩個檔案,如下圖紅圈中控制檯列印資訊如下圖命令列。之後
在source.txt中添加了些文字資訊“source中資料”,再次執行程式,程式執行完後,開啟nobuffer.txt,發現其內容和source.txt中內容完全一致
如下圖所示。
    該實驗完成無緩衝方式的檔案讀/寫操作。先建立兩個檔案,source.txt和nobuffer.txt,然後反覆從檔案source.txt中讀出資料塊,
並寫到檔案nobuffer.txt中去,直到檔案尾為止。

image