2014-03-22 2 views
0

Я хочу отслеживать количество раз, когда определенная операция выполняется в файле путем кодирования метаданных в альтернативный поток данных. До сих пор я переопределен OnSaveDocument к записи этого значения в файл по экономии:Ошибка записи метаданных в файл

BOOL CEmergenceDoc::OnSaveDocument(LPCTSTR lpszPathName) 
{ 

CRichEditDoc::OnSaveDocument(lpszPathName); 

CString stream = lpszPathName; 
stream += ":iterations"; 
LPCTSTR newPath = stream; 
HANDLE hStream; 
DWORD dwRet; 

hStream = CreateFile(newPath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, 

NULL); 
if(hStream == INVALID_HANDLE_VALUE) 
    printf("Cannot open testfile:stream\n"); 
else { 
    CString str; 
    CEmergenceView * current = CEmergenceView::GetView(); 
    str.Format(_T("%d"), current->iterations); 
    WriteFile(hStream, str, str.GetLength(), &dwRet, NULL); 
} 

return TRUE; 
} 

Я также переопределен OnFileOpen читать альтернативный поток данных сохраненного файла.

void CEmergenceApp::OnFileOpen() 
{ 
HANDLE hStream; 
DWORD dwRet; 
char ReadBuffer[BUFFERSIZE] = {0}; 

CWinAppEx::OnFileOpen(); 
OutputDebugString((CString)"here"); 
CEmergenceDoc * currentDoc = CEmergenceDoc::GetDoc(); 
CString currentPath = currentDoc->GetPathName(); 
currentPath += ":iterations"; 
OutputDebugString(currentPath); 
hStream = CreateFile(currentPath, 
          GENERIC_WRITE, 
         FILE_SHARE_WRITE, 
            NULL, 
           OPEN_ALWAYS, 
             OPEN_EXISTING, 
            NULL); 
    if(hStream == INVALID_HANDLE_VALUE) 
    printf("Cannot open testfile:stream\n"); 
    else { 
    ReadFile(hStream, ReadBuffer, BUFFERSIZE-1, &dwRet, NULL); 
    OutputDebugString((CString)"here"); 
    } 

    CString test; 
    test = ""; 
    test += ReadBuffer; 
    OutputDebugString(test); 


} 

Как вы можете видеть из моего кода, я пытаюсь проверить, является ли это работает распечатав все, что в ReadBuffer, но это не печатает что-нибудь, даже если это добраться до ReadFile, когда я откройте файл. Может кто-нибудь, пожалуйста, взгляните на это и скажите мне, что не так? Благодарю.

EDIT:

я сделал следующую команду в CMD:

< более TestFile: поток

и, кажется, он записывает данные в альтернативный поток данных .... поэтому проблема должна лежать в чтении .....

ответ

0

Некоторые комментарии:

а) не кажутся

вы должны закрыть поток ручку hStream ни в одной из функций

б) проверить возвращаемые значения в WriteFile() и ReadFile() вызовов

с) в CEmergenceApp::OnFileOpen(), открыть файл с помощью GENERIC_READ или GENERIC_READ | GENERIC_WRITE

Смежные вопросы