2011-12-17 144 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);