// FileSpyDoc.cpp : implementation of the CFileSpyDoc class // #include "stdafx.h" #include "FileSpyApp.h" #include "global.h" #include "FileSpyDoc.h" #include "filespyview.h" #include "fastioview.h" #include "fsfilterview.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CFileSpyDoc IMPLEMENT_DYNCREATE(CFileSpyDoc, CDocument) BEGIN_MESSAGE_MAP(CFileSpyDoc, CDocument) //{{AFX_MSG_MAP(CFileSpyDoc) ON_COMMAND(ID_FILE_SAVE, OnFileSave) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CFileSpyDoc construction/destruction CFileSpyDoc::CFileSpyDoc() { // TODO: add one-time construction code here } CFileSpyDoc::~CFileSpyDoc() { } BOOL CFileSpyDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CFileSpyDoc serialization void CFileSpyDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } ///////////////////////////////////////////////////////////////////////////// // CFileSpyDoc diagnostics #ifdef _DEBUG void CFileSpyDoc::AssertValid() const { CDocument::AssertValid(); } void CFileSpyDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CFileSpyDoc commands void CFileSpyDoc::OnFileSave() { // TODO: Add your command handler code here OPENFILENAME OpenFileName; WCHAR sFilePath[1024]; WCHAR sFileName[1024]; WCHAR sFileStr[2048]; WCHAR sStr[1024]; WCHAR CRLF[3]; WCHAR TAB[1]; HANDLE hFile; long nSaved; int nMBRet, ti, nCount, tj; CFileSpyView *pIrp = (CFileSpyView *) pSpyView; CFastIoView *pFast = (CFastIoView *) pFastIoView; CFsFilterView *pFsFilter = (CFsFilterView *) pFsFilterView; DWORD nBytesWritten; if (pIrp->GetListCtrl().GetItemCount() == 0 && pFast->GetListCtrl().GetItemCount() == 0) { MessageBox(NULL, L"Nothing to save", L"FileSpy", MB_OK); return; } wcscpy(sFilePath, L"FILESPY.LOG"); sFileName[0] = 0; OpenFileName.lStructSize = sizeof(OpenFileName); OpenFileName.hwndOwner = AfxGetMainWnd()->m_hWnd; OpenFileName.hInstance = AfxGetInstanceHandle(); OpenFileName.Flags = OFN_HIDEREADONLY|OFN_NOREADONLYRETURN|OFN_PATHMUSTEXIST; OpenFileName.lpstrFilter = NULL; OpenFileName.lpstrCustomFilter = NULL; OpenFileName.nFilterIndex = 0; OpenFileName.lpstrFileTitle = sFileName; OpenFileName.nMaxFileTitle = 512; OpenFileName.lpstrInitialDir = NULL; OpenFileName.lpstrTitle = NULL; OpenFileName.lpstrDefExt = NULL; OpenFileName.lpfnHook = NULL; OpenFileName.lpstrFile = sFilePath; OpenFileName.nMaxFile = 512; if (!GetSaveFileName(&OpenFileName)) { return; } hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { nMBRet = MessageBox(NULL, L"The selected file already exists. Do you want to append to it?", L"FileSpy", MB_YESNOCANCEL); if (nMBRet == IDCANCEL) { return; } if (nMBRet == IDYES) { SetFilePointer(hFile, 0, NULL, FILE_END); } else { CloseHandle(hFile); hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } } else { hFile = CreateFile(sFilePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } if (hFile == INVALID_HANDLE_VALUE) { MessageBox(NULL, L"File creation error", L"FileSpy - Error", MB_OK); return; } CRLF[0] = 0x0D; CRLF[1] = 0x0A; CRLF[2] = 0; TAB[0] = 0x9; TAB[1] = 0; WriteFile(hFile, CRLF, 2, &nBytesWritten, NULL); // // Write IRP header string // // // Start saving the traces now // First save IRP traces and then FASTIO // nCount = pIrp->GetListCtrl().GetItemCount(); for (ti = 0; ti < nCount; ti++) { pIrp->GetListCtrl().GetItemText(ti, 0, sStr, 1024); wcscpy(sFileStr, sStr); for (tj = 1; tj < 10; tj++) { wcscat(sFileStr, TAB); pIrp->GetListCtrl().GetItemText(ti, tj, sStr, 1024); wcscat(sFileStr, sStr); } wcscat(sFileStr, CRLF); WriteFile(hFile, sFileStr, wcslen(sFileStr), &nBytesWritten, NULL); } nSaved = nCount; // // FastIO View now // nCount = pFast->GetListCtrl().GetItemCount(); for (ti = 0; ti < nCount; ti++) { pFast->GetListCtrl().GetItemText(ti, 0, sStr, 1024); wcscpy(sFileStr, sStr); for (tj = 1; tj < 11; tj++) { wcscat(sFileStr, TAB); pFast->GetListCtrl().GetItemText(ti, tj, sStr, 1024); wcscat(sFileStr, sStr); } wcscat(sFileStr, CRLF); WriteFile(hFile, sFileStr, wcslen(sFileStr), &nBytesWritten, NULL); } CloseHandle(hFile); nSaved += nCount; swprintf(sStr, L"%ld traces saved", nSaved); MessageBox(NULL, sStr, L"FileSpy", MB_OK); }