writefileevent.cpp

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

CPP
116
字号
#include "stdafx.h"
#include "IOExplorer.h"
#include "DataArray.h"
#include "TraceEvent.h"
  #include "WriteFileEvent.h"


/****************************************************************************
*                     WriteFileEvent::WriteFileEvent
* Inputs:
*       CString s: Name of handle
*	HANDLE  hv: Actual handle, or 0 if not known
*	CDataArray BytesToWrite
* Effect: 
*       Initializes the WriteFileEvent
****************************************************************************/

WriteFileEvent::WriteFileEvent(CString s, HANDLE hv, CDataArray & BytesToWrite)
    {
     h = hv;
     name = s;
     NumberOfBytesToWrite = BytesToWrite.GetSize();
     this->BytesToWrite.Copy(BytesToWrite);
     NumberOfBytesWritten = 0;
    }

CString WriteFileEvent::display_result()
    {
     CString s;

     if(result)
	s.LoadString(IDS_TRUE);
     else
	s.LoadString(IDS_FALSE);
     return s;
    }

/****************************************************************************
*                          WriteFileEvent::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 WriteFileEvent::execute()
    {
     if(h == NULL)
        { /* invalid handle */
	 lasterror = ERROR_INVALID_HANDLE;
	 return FALSE;  // bogus
	} /* invalid handle */

     CWaitCursor c;

     result = WriteFile(h, &BytesToWrite.ElementAt(0), NumberOfBytesToWrite,
     						&NumberOfBytesWritten, NULL);
     if(result)
	lasterror = 0;
     else
	lasterror = ::GetLastError();
     return result;
    }

/****************************************************************************
*                          WriteFileEvent::display
* Result: CString
*       Display string for the event
* Effect: 
*       Creates a displayable string
****************************************************************************/

CString WriteFileEvent::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("WriteFile(%s, &buffer, %d, &BytesWritten, NULL)"),
     		handle, NumberOfBytesToWrite);

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

TraceEvent * WriteFileEvent::copy()
    {
     WriteFileEvent * e = new WriteFileEvent(name, h, BytesToWrite);
     e->NumberOfBytesToWrite = NumberOfBytesToWrite;
     e->NumberOfBytesWritten = NumberOfBytesWritten;
     copyTraceData(e);
     return e;
    }

⌨️ 快捷键说明

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