Hi, Thanks for the explanation guys. I understand how it works now. We have a BFile created, which is then used in the Flatten() function as it a BDateIO object. So, what I have done is the following excerpt: ..... BFile stream = BFile("/home/yash/...../Message", B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY); message -> Flatten(&stream); .... Note: (1) Message in the path string is a file that I had just created. Its an empty file (of course :) ). (2) the message variable in the second line is the BMessage parameter that is obtained from the message_print_hook(BMessage*, BHandler**, BMessageFilter*) function. On running the code, the messages are displayed (in the console using a println function), but on opening the Message file, nothing is present in it. Am I missing something here? Thanks, Yash On Sat, Aug 1, 2009 at 2:39 AM, Stephan Assmus <superstippi@xxxxxx> wrote: > Hi, > > On 2009-07-31 at 16:28:17 [+0200], Yashasvi A.C. <yashasviac@xxxxxxxxx> > wrote: > > On Thu, Jul 30, 2009 at 2:07 AM, Axel Dörfler > > <axeld@xxxxxxxxxxxxxxxx>wrote: > > > "Yashasvi A.C." <yashasviac@xxxxxxxxx> wrote: > > > > file = BFile("..\", "..\MessageStore\", B_READ_WRITE); > > > > > > Flattening writes into the BDataIO (it's a stream), it doesn't generate > > > new files in a folder. You need to open the files you want to flatten > > > the BMessage into directly. > > > > > So, you mean I open a file in a read-write format and then use the > > flatten function. How does the flatten() know which file it needs to > > stream the data to? > > Because you pass it the file object of course: > > BFile stream("path/to/file", B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY); > message.Flatten(&stream); > > > Best regards, > -Stephan > >