2013-04-10 93 views
0

我遇到了win32問題。我必須使用C++在win32中將一些動態數據寫入文件。我知道如何將字符串寫入文件的基本知識,但是我們如何寫入ints,float等數據到文件中。將動態數據寫入win32文件

我有一個文件,我將數據複製到另一個新創建的文件。我需要將ints,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); 

} 
+0

下面關於如何存儲數據似乎存在一些混淆。你能舉一個例子說明你正在給一個文件寫一個字符串的機制是什麼? – 2013-04-10 07:23:23

回答

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); 
+0

我很抱歉,但我需要這樣的Win32。我將二進制數據複製到另一個文件並且必須添加值。我怎麼能在win32中做到這一點? – nullPointer2 2013-04-10 07:14:57

+0

我是否必須爲每種數據類型使用WriteFile? – nullPointer2 2013-04-10 07:20:07

+0

我本來以爲使用C++文件接口是一個更好的選擇。更簡單,更一致。 – 2013-04-10 07:21:56

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)); 
... 

以前的片段是有點粗,你可能需要檢查像字節序和對齊問題。