• 0

[VB.NET] Delete File in process


Question

Ok gang,

I've got an interesting problem. I have a .net 2.0 app that goes off to a server to get a file and unzip it locally. This process is threaded. It's possible that during the first run through the process the end-user may need to stop the original process and go get a different file.

So, I abort the initial thread and start over. The issue? (Glad you asked) Seems that one or more files (the zip and possibly files from within the zip file, depending on how far along the initial process is) will not delete (File.Delete(path) as these files are in use my another process.

Exact error:

Description: The process cannot access the file 'c:\TestExtract\75872-01-1.ado' because it is being used by another process.

The code that is pulling the file from the zip is here:

--- BEGIN CODE CHUNK --------

If (sFileName <> String.Empty) Then

Dim StreamWriter As FileStream = File.Create(sDirectory & theEntry.Name)

Dim Size As Integer = 2048

Dim data(2048) As Byte

While (True)

Size = stmZipFile.Read(data, 0, data.Length)

If (Size > 0) Then

StreamWriter.Write(data, 0, Size)

Else

Exit While

End If

End While

StreamWriter.Close()

End If

--- END OF CODE CHUNK --------

Ive tried watching for the thread's abort request in that loop, but it never gets it. So I can't close the stream (arg)

I've looked to see if I can get the handle of the process that is using the file so I can kill the process and then the file... but so far no luck. I'm heading home now, but I'll check back in a few hours (it's 5pm est)

Thanks for any ideas.

Link to comment
https://www.neowin.net/forum/topic/578013-vbnet-delete-file-in-process/
Share on other sites

4 answers to this question

Recommended Posts

  • 0

The quickest thing that I would offer would be to have some type of boolean variable that the code chunk continuously checks within it's while(true) loop. such as

While(_cancelZip = false)
   Size = stmZipFile.Read(data, 0, data.Length)
   If (Size &gt; 0) Then
	  StreamWriter.Write(data, 0, Size)
   Else
	  Exit While
   End If
End While

_cancelZip should be a private member variable that can be accessed externally through an Exposed Property.

After this loop, check to see if _cancelZip = true. If it is, you must close this StreamWriter and then delete the file.

Does this make sense?

  • 0

There is a FileSystemWatcher component that you may be able to use. Have you looked into that?

EDIT: Re-read your question and the FileSystemWatcher probably isn't what you're looking for.

Anyway, you are right in looking for the Abort Thread request, but the fact that you aren't getting that means that you are most likely not threading properly. Although bleepjay's solution will probably work, it is clumsy and not the way it should be done with the advent of Threading in .NET. I recommend you look at some of the many threading tutorials online.

Here are a few links I Googled quickly, hope it's useful:

http://msdn.microsoft.com/msdnmag/issues/01/07/vbnet/

http://www.devx.com/getHelpOn/10MinuteSolution/20365

http://www.stardeveloper.com/articles/disp...0404&page=1

http://blogs.msdn.com/dougturn/archive/200...and-vb-net.aspx

Edited by magik
  • 0
  bleepjay said:
The quickest thing that I would offer would be to have some type of boolean variable that the code chunk continuously checks within it's while(true) loop. such as

While(_cancelZip = false)
   Size = stmZipFile.Read(data, 0, data.Length)
   If (Size &gt; 0) Then
	  StreamWriter.Write(data, 0, Size)
   Else
	  Exit While
   End If
End While

_cancelZip should be a private member variable that can be accessed externally through an Exposed Property.

After this loop, check to see if _cancelZip = true. If it is, you must close this StreamWriter and then delete the file.

Does this make sense?

Hummm... the boolean is an intesting idea. I can set that, wait a moment and then kill the process. I'll give it a try in the morning.

magik,

As for the file system watcher... how would that help? I need to get a specific file at a specific time, not all the files (there are thousands of them!). But maybe you meant something else that I'm not getting.

  • 0

^ Yea, sorry, I didn't read your question fully the first time. I hope my edited post is of more use to you. :)

To clarify: Instead of looking for the Abort Request within your loop, you should have the loop within a Thread Process and then a separate Event Hander that Handles the Thread Abort Request. When that event is fired, it should halt the Thread Process.

Does that make more sense?

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Popular Now

  • Posts

    • considering that took 4 years "to fix" ryzen performance on windows 11. look at the amount of time that AMD user have a degraded performance compared to intel on microsoft latest and greatest OS
    • MosaLingua Language Learning lifetime subscription price dropped by 97% by Steven Parker Today's highlighted deal lets you save 97% off lifetime access to a MosaLingua Language Learning Fluency Bundle. Buying link below. Description: Learning new languages doesn't have to be difficult or exhausting. In fact, you can learn and speak a foreign language at your own pace. MosaLingua is an all-in-one platform for learning the most useful words and expressions in the language of your choice, practicing language immersion, and improving your language skills with numerous different resources. Pick up the skills you need to use the language in any situation and store up to 6,000 keywords and expressions in your long-term memory, and choose content depending on your needs and your level. MosaLingua is a personalized language learning tool that adjusts to your level and your schedule, letting you make quick progress and avoid time-wasters. Access to 11 Full Language Courses: English, Spanish, French, Italian, German, Portuguese, Russian, Chinese, Japanese, Korean, and Arabic—plus any new languages we add in the future, at no extra cost. Science-Based Learning Method: Spaced repetition, neuroscience, cognitive psychology, and the 80/20 rule combine to help you retain vocabulary & speak faster. All-in-One Learning App: Practice listening, speaking, reading, and writing in one place with dialogues, flashcards, videos, audiobooks, grammar lessons & hands-on exercises. AI-Powered Coaching & Tools: Practice with MosaChat-AI, your 24/7 virtual tutor that helps you improve your writing and speaking skills with personalized feedback. Learn from the Content You Love: Thanks to MosaDiscovery, you can turn any online content into a learning opportunity. Learn languages by watching YouTube videos, Netflix series, reading articles, or exploring any website—with instant translations, personalized flashcards, and real-world vocabulary. Offline Mode & Cross-Platform Sync: Learn on your terms—anywhere, anytime. Use the app on iOS, Android, or the web. Built for Busy People Who Want Quick Results: Make real progress with just 10 minutes per day. Short, targeted sessions fit into any schedule. Good to know Length of access: lifetime Redemption deadline: redeem your code within 30 days of purchase Access options: desktop or mobile Max number of device(s): 1 Only available to NEW users Version: latest Updates included Lifetime access to MosaLingua Language Learning normally costs $4,850, but you can pick it up for just $97.99 for a limited time that's a saving of $4,702 off. For a full description, specs, and info, click the link below. Mosalingua: Lifetime Subscription now just $97.99 (was $4,850) Although priced in U.S. dollars, this deal is available for digital purchase worldwide. We post these because we earn commission on each sale so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. Other ways to support Neowin Whitelist Neowin by not blocking our ads Create a free member account to see fewer ads Make a donation to support our day to day running costs Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: Neowin benefits from revenue of each sale made through our branded deals site powered by StackCommerce.
    • you know what, looking at it again. you're right, i'm wrong. there are no curves. it's just straight lines. it's flat.
  • Recent Achievements

    • One Month Later
      EdwardFranciscoVilla earned a badge
      One Month Later
    • One Month Later
      MoyaM earned a badge
      One Month Later
    • One Month Later
      qology earned a badge
      One Month Later
    • One Year In
      Frinco90 earned a badge
      One Year In
    • Apprentice
      Frinco90 went up a rank
      Apprentice
  • Popular Contributors

    1. 1
      +primortal
      449
    2. 2
      +FloatingFatMan
      249
    3. 3
      snowy owl
      239
    4. 4
      ATLien_0
      196
    5. 5
      Xenon
      141
  • Tell a friend

    Love Neowin? Tell a friend!