Ask a Question related to ASP.NET General, Design and Development.
-
PJ #1
File.IO
I have an open FileStream and I open a BinaryWriter on it. After writing to
this file, I want to read it to another stream.
FileStream fs = new FileStream(Path.GetTempFileName());
BinaryWriter bw = new BinaryWriterer(fs);
// write data to a filestream
bw.Close();
fs.Position = 0; // ** Exception, Object is disposed
BinaryReader br = new BinaryReader(fs);
// read file and send to another stream
However, apparently closing the BinaryWriter closes the FileStream. I don't
understand why closing a writer on a stream closes the stream itself.
What's the best way to accomplish what I am trying to do?
TIA~ PJ
PJ Guest
-
problem in binding xml file data to datagrid xml file isgenerated through JSP file
problem it that i am creating xml file using JSP file and i want to bind DataGrid with xml file data that is created using JSP but it will not Bind... -
File Viewer / Bloated file sizes / What is the best file format?
I would like to find a viewer capable of looking at the main Adobe formats as well as the standard formats such as JPG and WMF ... but yet the only... -
Open file, make changes, save file, close, re-open, file contents not changed
I've now run into this several times and it's completely destroyed all of my confidence in Ilustrator CS on Mac. I'm hoping someone can confirm that... -
[BUG] File#rewind, File#syswrite, File#pos on Cygwin build
On the cygwin build of ruby v1.8.0, I have encountered a strange bug when using rewind, syswrite and pos. If you open a file in read/write mode,... -
Confused about locking a file via file.flock(File::LOCK_EX)
I am writing a ruby appl under AIX where I need to update the /etc/hosts table. I would like to make sure that during my update nobody else can... -
Jon Skeet #2
Re: File.IO
PJ <pjwal@hotmail.com> wrote:
Because for almost all the time, that's actually what you want. At> I have an open FileStream and I open a BinaryWriter on it. After writing to
> this file, I want to read it to another stream.
>
> FileStream fs = new FileStream(Path.GetTempFileName());
> BinaryWriter bw = new BinaryWriterer(fs);
>
> // write data to a filestream
>
> bw.Close();
> fs.Position = 0; // ** Exception, Object is disposed
> BinaryReader br = new BinaryReader(fs);
>
> // read file and send to another stream
>
> However, apparently closing the BinaryWriter closes the FileStream. I don't
> understand why closing a writer on a stream closes the stream itself.
least, it's almost always what *I* want :)
Hmm... not sure. It would be fairly easy to write a> What's the best way to accomplish what I am trying to do?
NonClosingFilterStream or something similar, which passes through all
method calls apart from Close. I *think* that would do it...
--
Jon Skeet - <skeet@pobox.com>
[url]http://www.pobox.com/~skeet/[/url]
If replying to the group, please do not mail me too
Jon Skeet Guest
-
Gabriele G. Ponti #3
Re: File.IO
PJ,
The behavior of the BinaryWriter class you are describing is by design. If
you read the documentation it says: "[BinaryWriter.Close()] Closes the
current BinaryWriter and the underlying stream.". Actually all the Close()
method is doing is call the Dispose() method with true as only parameter.
When the parameter equal true the Dispose() method closes the stream
associated with it.
If you delay closing the BinaryWriter object you will be able to read from
the file via the BinaryReader object created from the same file stream.
A more complex solution would be to create a new class inheriting from
BinaryWriter, and overload the Close() method so that it won't close the
file stream. You will have to close it manually.
Gabriele
"PJ" <pjwal@hotmail.com> wrote in message
news:%23Movw3HUDHA.1712@TK2MSFTNGP11.phx.gbl...to> I have an open FileStream and I open a BinaryWriter on it. After writingdon't> this file, I want to read it to another stream.
>
> FileStream fs = new FileStream(Path.GetTempFileName());
> BinaryWriter bw = new BinaryWriterer(fs);
>
> // write data to a filestream
>
> bw.Close();
> fs.Position = 0; // ** Exception, Object is disposed
> BinaryReader br = new BinaryReader(fs);
>
> // read file and send to another stream
>
> However, apparently closing the BinaryWriter closes the FileStream. I> understand why closing a writer on a stream closes the stream itself.
> What's the best way to accomplish what I am trying to do?
>
> TIA~ PJ
>
>
Gabriele G. Ponti Guest
-
PJ #4
Re: File.IO
Overrloading the Close() method w/ a boolean parameter seems like the least
complex and the way they should have designed it to me. I guess I should
read the documentation more, as I have always called .Close() on the stream
as well.
thx! PJ
"Gabriele G. Ponti" <ggponti@hotmail.com> wrote in message
news:epTfwtIUDHA.2252@TK2MSFTNGP12.phx.gbl...writing> PJ,
>
> The behavior of the BinaryWriter class you are describing is by design. If
> you read the documentation it says: "[BinaryWriter.Close()] Closes the
> current BinaryWriter and the underlying stream.". Actually all the Close()
> method is doing is call the Dispose() method with true as only parameter.
> When the parameter equal true the Dispose() method closes the stream
> associated with it.
>
> If you delay closing the BinaryWriter object you will be able to read from
> the file via the BinaryReader object created from the same file stream.
>
> A more complex solution would be to create a new class inheriting from
> BinaryWriter, and overload the Close() method so that it won't close the
> file stream. You will have to close it manually.
>
> Gabriele
>
> "PJ" <pjwal@hotmail.com> wrote in message
> news:%23Movw3HUDHA.1712@TK2MSFTNGP11.phx.gbl...> > I have an open FileStream and I open a BinaryWriter on it. After> to> don't> > this file, I want to read it to another stream.
> >
> > FileStream fs = new FileStream(Path.GetTempFileName());
> > BinaryWriter bw = new BinaryWriterer(fs);
> >
> > // write data to a filestream
> >
> > bw.Close();
> > fs.Position = 0; // ** Exception, Object is disposed
> > BinaryReader br = new BinaryReader(fs);
> >
> > // read file and send to another stream
> >
> > However, apparently closing the BinaryWriter closes the FileStream. I>> > understand why closing a writer on a stream closes the stream itself.
> > What's the best way to accomplish what I am trying to do?
> >
> > TIA~ PJ
> >
> >
>
PJ Guest
-
PJ #5
Re: File.IO
> Because for almost all the time, that's actually what you want. At
It occurred to me that maybe it sounds like I'm trying to write a virus,> least, it's almost always what *I* want :)
lol. The reason I need to do this is that I am compressing a set of files
and then sending it out to an HTTP response stream. I was sending the
compressed bytes directly to the stream as the compression was taking
place.....but w/out the compression being complete, I have no way of setting
the Content-Length header, so the d/l dialog box does not show a %
completion ( unnacceptable I'm told ).
thx! PJ
PJ Guest
-
PJ #6
Re: File.IO
good call
> Sounds like you should just ditch the BinaryWriter, and just use the
> FileStream's write methods directly.
>
>
> David
>
>
PJ Guest
-
Jon Skeet #7
Re: File.IO
PJ <pjwal@hotmail.com> wrote:
In that case, given that effectively you've *got* to buffer the whole>> > Because for almost all the time, that's actually what you want. At
> > least, it's almost always what *I* want :)
> It occurred to me that maybe it sounds like I'm trying to write a virus,
> lol. The reason I need to do this is that I am compressing a set of files
> and then sending it out to an HTTP response stream. I was sending the
> compressed bytes directly to the stream as the compression was taking
> place.....but w/out the compression being complete, I have no way of setting
> the Content-Length header, so the d/l dialog box does not show a %
> completion ( unnacceptable I'm told ).
thing anyway, you could just write to a MemoryStream first, find the
length of that, and then dump the contents of the memory stream to the
real response.
--
Jon Skeet - <skeet@pobox.com>
[url]http://www.pobox.com/~skeet/[/url]
If replying to the group, please do not mail me too
Jon Skeet Guest
-
PJ #8
Re: File.IO
I don't understand what you're saying, I don't have to buffer the whole file
at all. The Content-Length header is the length of the content only, not
the whole response including the headers. The fs.Length property gives me
the value for that header w/out buffering the whole file.
"Jon Skeet" <skeet@pobox.com> wrote in message
news:MPG.198840a8d5c5df0b98a1af@news.microsoft.com ...files> PJ <pjwal@hotmail.com> wrote:> >> > > Because for almost all the time, that's actually what you want. At
> > > least, it's almost always what *I* want :)
> > It occurred to me that maybe it sounds like I'm trying to write a virus,
> > lol. The reason I need to do this is that I am compressing a set ofsetting> > and then sending it out to an HTTP response stream. I was sending the
> > compressed bytes directly to the stream as the compression was taking
> > place.....but w/out the compression being complete, I have no way of>> > the Content-Length header, so the d/l dialog box does not show a %
> > completion ( unnacceptable I'm told ).
> In that case, given that effectively you've *got* to buffer the whole
> thing anyway, you could just write to a MemoryStream first, find the
> length of that, and then dump the contents of the memory stream to the
> real response.
>
> --
> Jon Skeet - <skeet@pobox.com>
> [url]http://www.pobox.com/~skeet/[/url]
> If replying to the group, please do not mail me too
PJ Guest



Reply With Quote

