• 0

FileStream - The Process Cannot Access The File


Question

Hello, 

 

I have a file copying program and I have a custom class that utilizes a System.IO.FileSteam to copy a file to a destination computer.  For the most part it works quite well.  However I use it to copy to many remote locations.  Some of them have subpar network connections.  Every so often I'll get a server that has a unreliable network connection and it will momentarily drop off the network for a few seconds.  When this happens my FileStream breaks with the exception "The specified network name is no longer available.".  This is expected.

However the problem is after the program has waited 60 seconds it will retry the transfer.  The problem now is it can't even start because I get the error "The process cannot access the file '\\MyServer\c$\MyFile.zip' because it is being used by another process".  I'll continue to get this error indefinitely until I close the program and restart the transfer, then it is able to transfer once again.

It would appear that my source server still has a file handle open when this happens that's preventing the transfer again and closing the program releases it.  I would like to programically release the handle so I can restart the transfer automatically.

 

Here's what I've tried so far:

When the file transfer is started, I grab the FileSteam.SafeFileHandle to a variable.  When I get the above error, I've tried accessing SafeFileHandle.SetHandleAsInvalid(), SafeFileHandle.DangerousRelease() and SafeFileHandle.Close(), but I'll still get the file in use error when I retry.

12 answers to this question

Recommended Posts

  • 0

To replicate the problem, I imported my DLL into powershell.  I waited for the problem to occur.  I then grabbed the SafeFileHandle.  I first tried SetFileHandleAsInvalid() then retried.  Then I tried DangerousRelease().  Finally I tried Close(), but at that point I got "Exception calling "Close" with "0" argument(s): "Safe handle has been closed".

 

Also if I just call my handle variable it shows:   IsInvalid:  False, IsClosed:  True

  • 0
  On 13/03/2014 at 21:48, snaphat (Myles Landwehr) said:

Is the filestream locked? Closing a file that has outstanding locks is undefined according to the documentation.

 

Some how I never thought of that.  I always assumed that when I received an exception on a FileStream.Write(...) that the filestream was hosed then.  I adjusted my code as follows:

                try
                { m_Dest.Write(m_Buffer, 0, m_CurrentBlockSize); }
                catch (IOException ex)
                {
                    //  added the section below:
                    if (m_Dest.CanWrite)
                    {
                        try
                        { m_Dest.Close(); }
                        catch { }
                    }
                    // end new section
                    HadExceptionWhileCopying(ex, true);
                    return;
                }

So far it worked in my test environment.  Will see if it works in production tomorrow.

Thanks Myles!

  • 0

^ yeah the filestream may still be valid and be locked. For that matter, it could technically be still not working (in terms of communication), but it could still be marked as locked. I was thinking of calling unlock() when I posted my response. I'm not sure why the above code would work given that canWrite should just give you the state of whether the stream is closed or not and if you call close() on an already closed stream it should work fine.

  • 0
  On 15/03/2014 at 00:06, stumper66 said:

My above solution worked.

 

I dug through my existing code and it was supposed to call a close on the filestream  in the event of an error but due to a flaw in my logic it never got called.

I see, that definitely fits the bill for the error you were getting!

  • 0
  On 15/03/2014 at 00:28, notchinese said:

Is it feasible given the code design to just wrap the filestream in a using() {} block?

 

"using" is an assurance that Dispose() will be called to free resources. It doesn't necessarily call Close(). try...finally would do that.

  • 0
  On 21/03/2014 at 12:54, Eric said:

"using" is an assurance that Dispose() will be called to free resources. It doesn't necessarily call Close(). try...finally would do that.

Yes it does. http://stackoverflow.com/questions/911408/does-stream-dispose-always-call-stream-close-and-stream-flush

 

In general, if an object implements Dispose() then you can expect that calling that is enough to clean it up properly, whatever the state it was in.

 

Also, using actually expands to try-finally so it's strictly equivalent, if all you're doing in the finally clause is to call Dispose().

  • 0
This topic is now closed to further replies.
  • Posts

    • More Microsoft Account headaches: Office 2024 licensing bug finally gets detailed fix by Sayan Sen Microsoft often highlights the benefits of a Microsoft account (MSA) as it points out the unified access users get across devices and services like Windows, Office, OneDrive, and Xbox, which can help in synchronization of files and settings for convenience. That is also why it is a mandatory requirement during Windows 11 installs. However, there can be major problems too. For example, earlier this month, we reported on an incident wherein a Windows user was locked out of their Microsoft Account when Windows flagged their OneDrive upload activities, and apparently there was no way to recover their account. We discussed how, in such a case, users can lose all their data, especially if it's BitLocker encrypted, which is not all that unlikely on Windows 11 24H2. You can read the story in full in this article here. Meanwhile, on the topic of MSA, Microsoft has finally released a detailed step-by-step guide for fixing the Office 2024 licensing bug. The tech giant had already published an update earlier back in December last year. While that was supposed to fix the issue, the problem likely persisted for many users. For those who need a refresher, users whose Microsoft accounts held licenses for both Office 2024 and earlier editions like Office 2021. After upgrading to Office 2024, the MSA continued to display the older version. At the time, Microsoft only stated that installing the latest version of the Office 2024 app would fix the issue. This week, though, a detailed guide has been shared. The company writes: You can find the support article here on Microsoft's official website.
    • Hey Neowin folks, I’m struggling with my Samsung QLED Q80C smart TV’s Wi-Fi dropping randomly. It connects to my 5GHz network but loses signal every 20–30 minutes, interrupting streaming. Details: Device: Samsung QLED Q80C (2023 model), Tizen OS, firmware updated to latest (May 2025). Network: TP-Link Archer AX73 router, Wi-Fi 6, 5GHz band, WPA3 security. Environment: TV ~10 feet from router, no major interference (tested without microwave or cordless phones). Setup: Streaming Netflix, YouTube via built-in apps; issue persists across apps. Steps Tried: Restarted TV, router, and modem. Switched to 2.4GHz band—same issue, slower speed. Assigned static IP to TV in router settings. Reset TV network settings and reconnected. Checked router logs; no disconnect errors logged. Searched Neowin; found a 2024 thread on Wi-Fi issues but no TV-specific fixes. Expected: Stable Wi-Fi connection for uninterrupted streaming. Actual: Wi-Fi drops every 20–30 minutes, requiring manual reconnect. Has anyone faced Wi-Fi dropouts on Samsung QLED TVs or Tizen OS? Could it be a firmware bug or router setting? Any debug tips or workarounds? Thanks for any ideas!
    • I can see why you would need an AI browser
    • if you get your MSA locked and can't recover it, and if you are on win 11 24H2 that can do automatic encryption (on Home editions too), then the BitLocker key goes with that account.
  • Recent Achievements

    • Conversation Starter
      sophiaisabella32 earned a badge
      Conversation Starter
    • First Post
      Brett76 earned a badge
      First Post
    • One Year In
      78andyp earned a badge
      One Year In
    • One Month Later
      Cottonbud earned a badge
      One Month Later
    • One Month Later
      langat earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      595
    2. 2
      ATLien_0
      219
    3. 3
      Michael Scrip
      191
    4. 4
      +FloatingFatMan
      145
    5. 5
      Xenon
      135
  • Tell a friend

    Love Neowin? Tell a friend!