Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / December 2005

Tip: Looking for answers? Try searching our database.

how do i create a new file -- in memory?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
matt@mailinator.com - 23 Nov 2005 01:37 GMT
hello,

i have what i would guess to be a relatively "newbie" question: how do
i create & write to a new text file?

i have found plenty of articles (MSDN & other) on how to do this in
conjuction w/ the *file system*, but i do not wish to touch the
client's hard drive. rather, id like to build up a .txt file in memory,
then Response.WriteFile() it back to the user (ASP.NET plaform).

there are so many streams it's somewhat confusing. a high-level point
or link to an article would be most helpful.

thanks!
matt
Lloyd Dupont - 23 Nov 2005 02:19 GMT
>  id like to build up a .txt file in memory
>
> there are so many streams it's somewhat confusing. a high-level point
> or link to an article would be most helpful.

MemoryStream?
matt@mailinator.com - 23 Nov 2005 16:00 GMT
are you asking a question?
matt@mailinator.com - 23 Nov 2005 19:02 GMT
ok, so i can use this syntax to write:

       MemoryStream ms = new MemoryStream();
       StreamWriter sw = new StreamWriter(ms);

       foreach (DataRow row in _dtResults.Rows)
       {
               sw.WriteLine("foo");
       }

..got that part. but then what do to change that memorystream into a
file? the Response.WriteFile() method takes in either a file, or a
"IntPtr fileHandler", which i am not familar with.

is there a way to convert a stream into a new file? the File
constructor doesnt seem to take a stream as a parameter.

thanks!
matt@mailinator.com - 23 Nov 2005 19:54 GMT
ah.. ok, i dont think the memorystream is really needed. atleast in my
case... since i am return this to the web user, i can do so:

    //build file's contents
    StrinbBuilder sb = new StringBuilder(50);

    foreach (DataRow row in _dtResults.Rows)
    {
        sb.Append("foo");

        sb.Append("\n");
    }

    //send file to user
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.AppendHeader("content-disposition", "attachment;
filename=foo.text");
    Response.Flush();
    Response.Write(fileContents);
    Response.End();

(tho i am still curious about how one takes a memorystream and turns it
into a file object)

matt
Lloyd Dupont - 23 Nov 2005 22:22 GMT
It's a bit difficult, the beta WinFX SDK completely messed my C# express &
WebExpress documentation... :-(
basically you should use
HttpResponse.Write (String)
and build the string with an in memory stream.

How to do that? here is some pseudo code (caution: name of the actors could
have been modified)

// 1st create the memory stream to write to
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, Encoding.UTF8);

// 2nd fill it up
sw.WriteLine("blah blah blah");
sw.WriteLine("foo bar foo bar foo bar foo bar");

// 3rd get its content!
ms.Position = 0;
StreamReader sr = new StreamReader(ms, Encoding.UTF8);
string content = sr.ReadToEnd();

// 4th write it to the user
HttpResponse.Write(content);

> ah.. ok, i dont think the memorystream is really needed. atleast in my
> case... since i am return this to the web user, i can do so:
[quoted text clipped - 22 lines]
>
> matt
matt@mailinator.com - 24 Nov 2005 17:40 GMT
yeah, psuedo code is great, thanks.

now looking at that.. doesnt it seem much heavier than the above
(stringbuilder, response.write)...?

thanks,
matt
Lloyd Dupont - 24 Nov 2005 23:20 GMT
ho, oops....

1st. I missed the part with the StringBuilder. You keep changing variable
names, that confuses me!
just to make it clear:
yep, you could write
StringBuilder sb;
Response.Write(sb.ToString())

it's even better in this case in your case!.

2dn: I was addressing your question about MemoryStream.
Showing you how to work with them.
Of course my pseudo-code is much heavier than your StringBuilder version but
it's also much more extensible / flexible.
On top of that, as you seems to be not very knowledgeable in the Stream
area, it shows some usage of Stream chaining, which is a powerfull lego
concept.

> yeah, psuedo code is great, thanks.
>
[quoted text clipped - 3 lines]
> thanks,
> matt
matt@mailinator.com - 25 Nov 2005 19:05 GMT
doh! i put my example together from two different tests, thus the
mis-named variables. sorry.

ah.. yes. thanks for the pointers on the stream. thats good to know
about the memorywriter & streamreader.

but, what about working w/ a File obj -- does a File *have* to be
linked to the file system (ie, harddrive)? i wonder if one can build-up
a text file via the MemoryStream as in your example, and then convert
it somehow into a File, say if that's what some other function requires
for further manipulation. (this is not my present scenario, but is
interesting nonetheless).

thanks again for the tips.

matt
Lloyd Dupont - 25 Nov 2005 23:07 GMT
> doh! i put my example together from two different tests, thus the
> mis-named variables. sorry.
Oki doki!

> but, what about working w/ a File obj -- does a File *have* to be
> linked to the file system (ie, harddrive)? i wonder if one can build-up
> a text file via the MemoryStream as in your example, and then convert
> it somehow into a File, say if that's what some other function requires
> for further manipulation. (this is not my present scenario, but is
> interesting nonetheless).

You get me lost here.
It's very confusing the way you say "only File"....

Here is a list of what you could call a file and their possible source.
I think I get most of them, but I might have missed what you were thinking
about, who knows?

.NET: System.IO.Stream: could be anything, including a MemoryStream as shown

.NET: System.IO.FileStream: typically only a file system file

.NET / C: string: filename: has to be a file system file in most case. (well
could be a pipe or a printer port, etc... but it's seldom the case)

C: HANDLE: many thing (socket, pipe, memoy mapped file, file system file,
com port, printer port, etc...) but typically, when created by the user, a
file system file.
However, with some effort, could be a memory mapped file with no file system
representation.

.NET: IntPtr (point to a Handle): as above.

So, look at the various signature of your methods/functions and you get your
answer.
if you don't know what you're speaking about, you can't tell!
matt@mailinator.com - 28 Nov 2005 18:26 GMT
>  It's very confusing the way you say "only File"....

...now im confused: there is no reference to "only File" except in your
message.. :)

in all the examples ive seen of working w/ the System.IO.File class,
it's linked to a file residing on the file system. what im saying is, i
wonder if it's possible to instantiate a File object that does *not*
use the file system, but rather, uses something youve built-up in a
memorystream.

for example, say Function A works takes in a System.IO.File and does
some processing with it. im wondering if Function B can *make* a
System.IO.File (without a file on the file system. just using a memory
stream), and then pass it to Function A.

make sense?

matt
Lloyd Dupont - 28 Nov 2005 22:57 GMT
>>  It's very confusing the way you say "only File"....
>
> ...now im confused: there is no reference to "only File" except in your
> message.. :)
>
> in all the examples ive seen of working w/ the System.IO.File class,
I told you it was confusing!
You can't instantiate "System.IO.File"!
So what do you want to do with it?
matt@mailinator.com - 02 Dec 2005 00:31 GMT
> I told you it was confusing!

yes!

hmmm...totally not following you -- i instantiate (System.IO.)File
objects all the time. based off of text files from the file system...

i was just wondering if an in-memory stream can be turned into a
System.IO.File object, but im begining to think no it cannot -- i think
the System.IO.File is tied to the filesystem, and cannot be used w/ an
im-memory-only file you created w/ a stream.

thanks!
matt
Lloyd Dupont - 02 Dec 2005 05:37 GMT
I don't believe you!
Post me a code sample!
For exemple here is a compilable sample
-- BUG.cs --
using System;
class Foo
{
   static void Main()
   {
       System.IO.File f = new System.IO.File();
       Console.WriteLine(f);
   }
}
--
If I try
csc /nologo BUG.cs
=>
BUG.cs(6,9): error CS0723: Cannot declare variable of static type
       'System.IO.File'
BUG.cs(6,28): error CS0712: Cannot create an instance of the static class
       'System.IO.File'
--
Where you could see that CSC (the C# compiler) agree me (can't instantiate
File).
Are you using Java?

if it does...... here is CSC version:
C:\temp>csc
Microsoft (R) Visual C# 2005 Compiler version 8.00.50215.44
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50215
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.

>> I told you it was confusing!
>
[quoted text clipped - 10 lines]
> thanks!
> matt
Lloyd Dupont - 02 Dec 2005 06:44 GMT
BTW, here is what the documentation says:
--
[ComVisibleAttribute(true)]
public sealed abstract class File--So I'm curious as to how you instantiate
an abstract class....
>> I told you it was confusing!
>
[quoted text clipped - 10 lines]
> thanks!
> matt
matt@mailinator.com - 02 Dec 2005 19:13 GMT
my mistake. i was confusing FileInfo & File; Directory.GetFiles
actually enumerates FileInfo, not File (i usually name the enum "file"
so i forgot it wasnt the actual file).

matt

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.