0

win32で困っています。c++を使用してwin32のファイルに動的データを書き込む必要があります。文字列をファイルに書き込む方法の基本は知っていますが、int、float などのデータをファイルに書き込む方法はありますか。

データを別の新しく作成したファイルにコピーしているファイルがあります。このファイルの先頭に、int、float などのデータを書き込む必要があります。データを追加できることはわかっています

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

それは、ファイルをどのように開いているか (実際にはどのモードであるか) によって異なります。それらをテキストモードで開いた場合、そのタイプに関係なくすべてが文字列/テキストの形式で書き込まれます。それ以外の場合は、ファイルをバイナリ モードで開くことを選択できます。そのモードでintint、 、など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 に答える