RE: Error when attempting to open files

Tech-Archive recommends: Fix windows errors by optimizing your registry



Hi Dylan,

Image.FromStream holds the underlying stream while it is in use. Try
loading the image data into memory and create an image from that. After the
ReadAllBytes line the File is released.

byte[] data = File.ReadAllBytes(imagepath);
MemoryStream ms = new MemoryStream(data);
Image img = Image.FromStream(ms);

Remember not to dispose the MemoryStream or you will end up with the
OutOfMemoryException you got when you closed the File.

--
Happy Coding!
Morten Wennevik [C# MVP]


"Dylan Parry" wrote:

Hi,

I have the following code:

private Image _image;

public MyImage(string filename)
{
FileStream file = File.Open(filename, FileMode.Open);
_image = Image.FromStream(file);
//file.Close();
}

Which essentially is used for passing a file name of an image, which is
then used for various things such as creating a thumbnail.

The problem I'm having is that if I create a thumbnail of the image that
is open, then reload the page in my browser, I get an error that reads:

"The process cannot access the file ... because it is being used by
another process"

So I figured that was because I forget to close the file stream after
opening the image file, so I added in the line of code that is commented
out in the example above.

Now when I run the code I receive:

"Out of memory."

If I attempt to create a thumbnail image with:

_image = _image.GetThumbnailImage(size, size, null, IntPtr.Zero);)

or:

"A generic error occurred in GDI+."

If I simply write the contents of the image to the browser:

_image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

When I don't close the file stream it works okay for the first time I
view the page (as a thumbnail, or the full-sized image), but gives the
error about it being in use if I refresh. It doesn't work at all when I
close the file stream.

Any ideas what I'm doing wrong here?

--
Dylan Parry
http://electricfreedom.org | http://webpageworkshop.co.uk

The opinions stated above are not necessarily representative of
those of my cats. All opinions expressed are entirely your own.

.



Relevant Pages

  • Re: FileStream.Close() & GarbageCollection - Memory Leak Question
    ... There are two, that I can think of, major sources of memory leaks in an application. ... While you don't have to explicitly call code to free memory allocated in a managed world, you still have to make all the information you got about the lifetime for your data available to the garbage collector. ... stream and releases any resources ... Dispose/Close typically disposes of "scarce" resources, like handles, files, sockets. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: off screen plain
    ... created a surface (soon to maybe be a memory stream) of 1024x14000. ... reset wouldn't let me lock the texture anymore. ... What if the device is lost for sometime. ...
    (microsoft.public.win32.programmer.directx.managed)
  • Re: AVStream : How to save a MPEG2-PS stream to a file?
    ... I find it very hard to believe that a memory copy for PS stream will yeild ... memory copy of data on Capture pin for my Still-Frame pin. ... MPEG2 PS into a file and PREVIEW means to connect a MPEG2 PS pin to MPEG2 ...
    (microsoft.public.development.device.drivers)
  • Re: How come biClrUsed is always zero?
    ... Never make an assumption as to how another API function handles a stream. ... The CF_DIB clipboard format requires a handle to a Global memory ... Both implement the features of an IStream interface backed by Window's ... you can use the Window's Native API. ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Find specific file types with a folder structure
    ... whenever I find an index.htm I create a THUMBNAIL of it ... and stream it from memory and into an object. ... Prev by Date: ...
    (microsoft.public.dotnet.languages.vb)