0

我遇到了win32的问题。我必须使用 c++ 将一些动态数据写入 win32 中的文件。我知道如何将字符串写入文件的基础知识,但是我们如何将整数、浮点数等数据写入文件。

我有一个文件,我正在将数据复制到另一个新创建的文件中。我需要将整数、浮点数等数据写入顶部的这个文件。我知道我们可以通过

char buff[] = "hello";

并将其复制到文件中,我不知道如何使用不同类型的数据类型来做到这一点。有什么帮助吗?

char buf[] = "hello";  //Null terminate
LPVOID lpMsgBuf; 
DWORD byteWritten = 0;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
BOOL ReadFileReturn;

HANDLE hFile = CreateFile("MYFILE.blo",    // open MYFILE.blo 
            GENERIC_WRITE | GENERIC_READ,              
            FILE_SHARE_READ,               // share for reading 
            NULL,                          // no security 
            OPEN_EXISTING,                   // existing file only 
            FILE_ATTRIBUTE_NORMAL,         // normal file 
            NULL);                         // no attr
ReadFileReturn = ReadFile(hFile,buf,30,&byteWritten,NULL);    
if(ReadFileReturn)
{
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                  NULL,
                  GetLastError(),
                  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                 (LPTSTR) &lpMsgBuf,
                  0,
                  NULL);
    WriteFile(hStdOut,buf,sizeof buf,NULL,NULL);

}
else
{
    WriteFile(hStdOut,"It Failed",sizeof "It Failed",NULL,NULL);

}
4

2 回答 2

1

这取决于您打开文件的方式(实际上是在哪种模式下)。如果您以文本模式打开它们,则无论其类型如何,所有内容都将以字符串/文本的形式写入。否则,您可以选择以二进制模式打开文件。在那种模式下int会写成int,float会写成float等等。

这是描述两种文件类型之间差异的链接http://www.fileinfo.com/help/binary_vs_text_files

您也许可以尝试以下方法:

char str[80] = "";
int a = 1, b = 2;
int n = sprintf(str, "%d", a+b);
DWORD bytesWritten;
WriteFile(fileHandle, str, strlen(str), &bytesWritten, NULL);
于 2013-04-10T07:07:31.370 回答
0

检查这个:

http://www.cplusplus.com/reference/ostream/ostream/write/

所以基本上你这样做:

 .... 
 std::ofstream myfile("filename");
 double my_data = 15;
 myfile.write( static_cast< const char*>(&my_data), sizeof( double ) );
 ...

前面的代码片段有点粗略,您可能需要检查字节序和对齐等问题。

于 2013-04-10T07:21:46.590 回答