Is there any chance of slightest light at the end of the tunnel in pursuing
the cin and binary mode operation together?

I am trying to see if I can open the cin in binary mode for read operation.
I am using VC++ with VS .NET 2003

While using VS 6.0, it was a piece of cake, but since there were a lot of
things just removed in VC++ .NET 2003 version, I am having a hard time
converting this little piece of code....

previously with VS 6.0 it was,

istream_withassign myFile;
filebuf *myFileBuf;
.......
myFileBuf = new filebuf (_fileno(stdin));
myFileBuf->setmode(filebuf::binary);
myFile = myFileBuf; // stream object is stream buffer

if (!(myFile.read(data, nBytes)))
{
if (myFile.eof())
{
status = M_EndOfFile;
}
else
.....
}

Which worked just fine.


Any ideas or hopes of converting it to VC++ .net 2003?



I have done something like this.... which obviously does not work..... It
reads the EOF before I expect it to. And it may be something with the cin not
opened in binary mode.

std::istream* myFile;

..........

myFile = &std::cin;

if (!(myFile->read (reinterpret_cast<char*>(data), nBytes)))
{
if (myFile->eof())
{
status = M_EndOfFile;
}
else
..........
}

Any help is appreciated..... Thanks in advance,
M

Re: cin and binary mode by Tom

Tom
Mon Sep 25 06:43:08 CDT 2006

manimau wrote:
> Is there any chance of slightest light at the end of the tunnel in pursuing
> the cin and binary mode operation together?
>
> I am trying to see if I can open the cin in binary mode for read operation.
> I am using VC++ with VS .NET 2003
>
> While using VS 6.0, it was a piece of cake, but since there were a lot of
> things just removed in VC++ .NET 2003 version, I am having a hard time
> converting this little piece of code....
>
> previously with VS 6.0 it was,
>
> istream_withassign myFile;
> filebuf *myFileBuf;
> .......
> myFileBuf = new filebuf (_fileno(stdin));
> myFileBuf->setmode(filebuf::binary);
> myFile = myFileBuf; // stream object is stream buffer
>
> if (!(myFile.read(data, nBytes)))
> {
> if (myFile.eof())
> {
> status = M_EndOfFile;
> }
> else
> .....
> }
>
> Which worked just fine.
>
>
> Any ideas or hopes of converting it to VC++ .net 2003?

This should work on 2003 and 2005 (and probably VC6 as well):

#include <iostream>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>

//...
_setmode(_fileno(stdin), _O_BINARY);
std::istream is(std::cin.rdbuf());
//or std::istream& is = std::cin;

_setmode is MS's version of the POSIX function setmode, so this solution
should port to UNIX simply by removing the start _s.

Tom