Solved

Write a Byte array to a file

Posted on 2007-11-29
12
403 Views
Last Modified: 2010-04-01
How can i write a byte array,for eg:

BYTE *buf = new BYTE[200];
buf=somedata ;

into a file,for eg "bytedata.dat"

please provide some good eg
0
Comment
Question by:aslamshikoh1
  • 5
  • 4
  • 2
  • +1
12 Comments
 
LVL 86

Expert Comment

by:jkr
Comment Utility
The easiest way would be to

#include <stdio.h>

//...


BYTE *buf = new BYTE[200];

//...

FILE* p = fopen(bytedata.dat","wb");

fwrite(buf, 1, 200);

fclose(p);
0
 
LVL 86

Expert Comment

by:jkr
Comment Utility
Or, more on the C++ side:

#include <fstream>
using namespace std;


BYTE *buf = new BYTE[200];

//..


ofstream os("bytedata.dat", ios_base::out | ios_base::binary);

os.write(buf,200);

os.close();
0
 
LVL 86

Expert Comment

by:jkr
Comment Utility
0
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
Don't forget to free your buffer
BYTE *buf = new BYTE[200];

delete [] buf;

Open in new window

0
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
Also, in C++ consider using std::string instead...
http://msdn2.microsoft.com/en-us/library/syxtdd4f(VS.80).aspx
0
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
An example using strings and streams...
#include <string>

#include <iostream>

#include <fstream>
 

int main()

{

	// The data we wish to write to file

	std::string sData("Hello world");
 

	// Open the file as a stream (destructor will close for us)

	std::ofstream ofs("c:\\temp\\data.txt");
 

	// If file was opened ok...

	if(ofs.is_open())

	{

		// Write out data to it

		ofs << sData;
 

		// If write error then report it

		if(!ofs.good())

		{

			std::cerr << "Failed to write data" << std::endl;

		}

	}
 

	return 0;

}

Open in new window

0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

Author Comment

by:aslamshikoh1
Comment Utility
Ok i got it but i have a continuous stream of bytes to write to a file.Its a thread which has a while loop like this:

while(oEditStreamImpl->isActive_  && --count)
      {
            

            ofstream os("bytedata.dat", ios_base::out | ios_base::binary);
                 os.write(buf,200);
}

os.close()

so how can i append the data to end of the file,like something to do with the file pointer,right now data is getting overwritten.
0
 

Author Comment

by:aslamshikoh1
Comment Utility
also write(buf,200) complains about not able to accept a byte,i guess a char array is what it accepts,so im just casting it like

write((char*)buf,200)

is it OK to do this
0
 
LVL 40

Accepted Solution

by:
evilrix earned 125 total points
Comment Utility
Try: -
ofstream os("bytedata.dat", ios_base::binary);

while(oEditStreamImpl->isActive_  && --count)

{

    os.write(reinterpret_cast<char *>(buf),200);

}

os.close();

Open in new window

0
 
LVL 86

Assisted Solution

by:jkr
jkr earned 125 total points
Comment Utility
>>is it OK to do this

yes, absolutely, since the stream is openend as binary.
0
 
LVL 40

Expert Comment

by:evilrix
Comment Utility
>> is it OK to do this
Yes, a stream expects a char * but you can cast any pointer type to that as long as you specify correctly the number of chars when writing it out. It helps if you just think of it as writing signed bytes.

NB. a wide stream expects wchar_t *
0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
btw, this :

        BYTE *buf = new BYTE[200];
        buf=somedata ;

creates a memory leak ... you're overwriting the pointer to the allocated 200 bytes with a new value.
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

What is C++ STL?: STL stands for Standard Template Library and is a part of standard C++ libraries. It contains many useful data structures (containers) and algorithms, which can spare you a lot of the time. Today we will look at the STL Vector. …
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now