readfileevent.cpp

来自「IO函数调用测试」· C++ 代码 · 共 126 行

CPP
126
字号
#include "stdafx.h"
#include "IOExplorer.h"
#include "DataArray.h"
#include "TraceEvent.h"
  #include "ReadFileEvent.h"


/****************************************************************************
*                     ReadFileEvent::ReadFileEvent
* Inputs:
*       CString s: Name of handle
*	HANDLE  hv: Actual handle, or 0 if not known
*	DWORD BytesToRead
* Effect: 
*       Initializes the ReadFileEvent
****************************************************************************/

ReadFileEvent::ReadFileEvent(CString s, HANDLE hv, DWORD BytesToRead)
    {
     h = hv;
     name = s;
     NumberOfBytesToRead = BytesToRead;
     NumberOfBytesRead = 0;
    }

/****************************************************************************
*                        ReadFileEvent::display_result
* Result: CString
*       
* Effect: 
*       The formatted result
****************************************************************************/

CString ReadFileEvent::display_result()
    {
     CString s;

     if(result)
	s.LoadString(IDS_TRUE);
     else
	s.LoadString(IDS_FALSE);
     return s;
    }

/****************************************************************************
*                          ReadFileEvent::execute
* Result: LRESULT
*       (LRESULT)TRUE if successful
*	(LRESULT)FALSE if failure
* Effect: 
*       Closes the handle whose handle value is supplied in the event block
****************************************************************************/

LRESULT ReadFileEvent::execute()
    {
     if(h == NULL)
        { /* invalid handle */
	 lasterror = ERROR_INVALID_HANDLE;
	 return FALSE;  // bogus
	} /* invalid handle */

     CWaitCursor c;

     buffer.SetSize(NumberOfBytesToRead);

     result = ReadFile(h, &buffer.ElementAt(0), NumberOfBytesToRead, &NumberOfBytesRead, NULL);
     if(result)
	 lasterror = 0;
     else
	lasterror = ::GetLastError();

     buffer.SetSize(NumberOfBytesRead); // truncate to exact size
     return result;
    }

/****************************************************************************
*                          ReadFileEvent::display
* Result: CString
*       Display string for the event
* Effect: 
*       Creates a displayable string
****************************************************************************/

CString ReadFileEvent::display()
    {
     CString handle;
     if(h == NULL)
        { /* no handle */
	 if(name.GetLength() == 0)
	    { /* no name */
	     handle = _T("");
	    } /* no name */
	 else
	    { /* has name */
	     handle = name;
	    } /* has name */
	} /* no handle */
     else
        { /* valid handle */
	 handle = name;
	} /* valid handle */

     CString rf;
     rf.Format(_T("ReadFile(%s, &buffer, %d, &BytesRead, NULL)"),
     		handle, NumberOfBytesToRead);

     return rf;
    }

/****************************************************************************
*                             ReadFileEvent::copy
* Result: TraceEvent *
*       A copy of the ReadFileEvent
* Effect: 
*       Makes a complete copy of the ReadFileEvent
****************************************************************************/

TraceEvent * ReadFileEvent::copy()
    {
     ReadFileEvent * e = new ReadFileEvent(name, h, NumberOfBytesToRead);
     e->NumberOfBytesRead = NumberOfBytesRead;
     e->buffer.Copy(buffer);
     copyTraceData(e);
     return e;
    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?