• 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.
  • Posts

    • WinSCP 6.5.2 by Razvan Serea  WinSCP is an open source free SFTP client, FTP client, WebDAV client and SCP client for Windows. Its main function is file transfer between a local and a remote computer. Beyond this, WinSCP offers scripting and basic file manager functionality. WinSCP features: Graphical user interface Translated into several languages Integration with Windows (drag&drop, URL, shortcut icons) U3 support All common operations with files Support for SFTP and SCP protocols over SSH-1 and SSH-2 and plain old FTP protocol Batch file scripting and command-line interface Directory synchronization in several semi or fully automatic ways Integrated text editor Support for SSH password, keyboard-interactive, public key and Kerberos (GSS) authentication Integrates with Pageant (PuTTY authentication agent) for full support of public key authentication with SSH Explorer and Commander interfaces Optionally stores session information Optionally supports portable operation using a configuration file in place of registry entries, suitable for operation from removable media WinSCP 6.5.2 changelog: Thumbnail view in file panels. Three selectable sizes of toolbar icons, showing slightly larger size by default. Switching to Segoe UI font with slightly larger size. Improvements to Synchronization checklist window, including resolving file moves and pushing synchronization to background queue. Ongoing local delete operation can be moved to a background queue. Optimized working with large local directories. Compatibility with new OneDrive WebDAV interface. Dark theme for session tabs. Improvements to S3 support, including more options to authentication and display and modification of S3 file/object tags. List of all changes. Download: WinSCP 6.5.2 | 11.6 MB (Open Source) Download: WinSCP MSI | 28.7 MB Download: Standalone Executable | 8.4 MB Link: WinSCP Home page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • QOwnNotes 25.6.2 by Razvan Serea QOwnNotes is a open source (GPL) plain-text file notepad with markdown support and todo list manager for GNU/Linux, Mac OS X and Windows, that (optionally) works together with the notes application of ownCloud (or Nextcloud). So you are able to write down your thoughts with QOwnNotes and edit or search for them later from your mobile device (like with CloudNotes) or the ownCloud web-service. The notes are stored as plain text files and you can sync them with your ownCloud sync client. Of course other software, like Dropbox, Syncthing, Seafile or BitTorrent Sync can be used too. Features: the notes folder can be freely chosen (multiple note folders can be used) sub-string searching of notes is possible and search results are highlighted in the notes application can be operated with customizable keyboard shortcuts external changes of note files are watched (notes or note list are reloaded) older versions of your notes can be restored from your ownCloud server trashed notes can be restored from your ownCloud server differences between current note and externally changed note are showed in a dialog markdown highlighting of notes and a markdown preview mode notes are getting their name from the first line of the note text (just like in the ownCloud notes web-application) and the note text files are automatically renamed, if the the first line changes compatible with the notes web-application of ownCloud and mobile ownCloud notes applications compatible with ownCloud's selective sync feature by supporting an unlimited amount of note folders with the ability to choose the respective folder on your server manage your ownCloud todo lists (ownCloud tasks or Tasks Plus / Calendar Plus) or use an other CalDAV server to sync your tasks to encryption of notes (AES-256 is built in or you can use custom encryption methods like Keybase.io (encryption-keybase.qml) or PGP (encryption-pgp.qml)) dark mode theme support theming support for the markdown syntax highlighting all panels can be placed wherever you want, they can even float or stack (fully dockable) support for freedesktop theme icons, you can use QOwnNotes with your native desktop icons and with your favorite dark desktop theme support for hierarchical note tagging and note subfolders support for sharing notes on your ownCloud server portable mode for carrying QOwnNotes around on USB sticks Evernote import QOwnNotes is available in many different languages like English, German, French, Polish, Chinese, Japanese, Russian, Portuguese, Hungarian, Dutch and Spanish Changes in QOwnNotes 25.6.2: The Find action dialog is now working again (for #3294) Added more French translation (thank you, jd-develop) Download: QOwnNotes 25.6.2 | 37.3 MB (Open Source) Download: QOwnNotes for Other Operating Systems View: QOwnNotes Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • So it’s fine he scams people to troll others? 🙄 This is a repeat of his watch fiasco.
    • That explains my recent issues with classic Outlook. I can see the FORMS2 folder has resolved the issue on my system.
    • Brave 1.79.126 by Razvan Serea Brave Browser is a lightning-fast, secure web browser that stands out from the competition with its focus on privacy, security, and speed. With features like HTTPS Everywhere and built-in tracker blocking, Brave keeps your online activities safe from prying eyes. Brave is one of the safest browsers on the market today. It blocks third-party data storage. It protects from browser fingerprinting. And it does all this by default. Speed - Brave is built on Chromium, the same technology that powers Google Chrome, and is optimized for speed, providing a fast and responsive browsing experience. Brave Browser also features Brave Rewards, a system that rewards users with Basic Attention Tokens (BAT) for viewing opt-in ads. This innovative system provides an alternative revenue model for content creators and a way to support the Brave community. Brave 1.79.126 changelog: Fixed crash when clicking on shields panel in certain cases. Fixed crash on navigation when a Google sign-in request has been triggered. (#46769) Fixed crash when Leo generates empty list when clicking on “Suggest questions” while using BYOM (Bring Your Own Model). (#46843) Fixed issue importing from Trezor wallet when Trezor Connect is outdated. (#46660) Upgraded Chromium to 137.0.7151.119. (#46911) Download: Brave Browser 64-bit | 1.2 MB (Freeware) Download: Brave Browser 32-bit View: Brave Homepage | Offline Installers | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • First Post
      Fuzz_c earned a badge
      First Post
    • First Post
      TIGOSS earned a badge
      First Post
    • Week One Done
      slackerzz earned a badge
      Week One Done
    • Week One Done
      vivetool earned a badge
      Week One Done
    • Reacting Well
      pnajbar earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      698
    2. 2
      ATLien_0
      279
    3. 3
      Michael Scrip
      208
    4. 4
      +FloatingFatMan
      195
    5. 5
      Steven P.
      130
  • Tell a friend

    Love Neowin? Tell a friend!