2011-12-17 137 views
-1

我正在嘗試用c和visual studio將字符串寫入映射文件。用字符串將映射文件寫入字符串

(pFile = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,0,0)) 

    start = pFile; 

    while(pFile < start + 750){ 
    *(pFile++) = ' '; 
    *(pFile++) = 'D'; 
    *(pFile++) = 'N'; 
    *(pFile++) = 'C'; 
    *(pFile++) = 'L'; 
    *(pFile++) = 'D'; 
    *(pFile++) = ' '; 
    if(!((pFile - start) % 50)) 
     *(pFile++) = 10; 
    else 
     *(pFile++) = ','; 
} 

如果我寫這樣的事情,我可以寫得很好。但我想寫一個字符串這個文件。我能怎麼做?我曾嘗試

sprintf(toFile, "A message of %3d bytes is received and decrypted.\n", strlen(message)); 
    WriteFile(pFile,toFile,strlen(toFile),&bytesWritten,NULL); 

這個媒體鏈接...

+0

當您嘗試第二個代碼段時發生了什麼?您是否調用了['GetLastError'](http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms679360.aspx)來查看出了什麼問題? – 2011-12-17 11:44:46

+0

沒有錯誤,但它只寫入一個字符文件... – 2011-12-17 11:48:42

+2

你只是想寫一些內存。爲此使用'memcpy'。 'WriteFile'是完全錯誤的。當你有文件句柄時使用它。用內存映射文件你有一個指向內存的指針。如果你想使用'WriteFile',你只需使用'CreateFile'而不用打擾內存映射。也許這真的是你需要做的。 – 2011-12-17 16:16:59

回答

2

WriteFile()希望打開HANDLE到一個文件,而不是指向一個內存地址。只需將您的新數據直接寫入所指向的內存中即可。您可以使用C庫字符串函數,例如:

char *start = (char *) MapViewOfFile(hMMap,FILE_MAP_ALL_ACCESS,0,0,0); 

char *pFile = start; 
while (pFile < (start + 750)) 
{ 
    strcpy(pFile, " DNCLD "); 
    pFile += 7; 
    *(pFile++) = (((pFile - start) % 50) == 0) ? '\n' : ','; 
} 
... 
sprintf(pFile, "A message of %3d bytes is received and decrypted.\n", strlen(message));  
... 
UnmapViewOfFile(start);