Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.Net] Zippen van een directory *

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
Even het volgende probleem.

Hier onder staan een paar stukjes uit mijn VB progamma. Maar ik als leek kom er even niet meer uit.

Visual Basic:
1
2
3
4
5
6
7
'Verwijderen Profile Directory
        If chkProfile.Checked Then
            HomeDir = "\\xxxxx\HomeDirs$\" & strUserNTName & "\Profile"
            DestDir = "\\xxxxx\d$\Backup\" & strUserNTName & ".zip"
            ZipFile(HomeDir, DestDir)
            objFSO.DeleteFolder("\\xxxxx\HomeDirs$\" & strUserNTName & "\Profile")
        End If


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
 Private Sub CreateZipFile(ByVal Filename As String) 'create a new empty zip file
        Dim Encoder As New System.Text.ASCIIEncoding
        Dim Header As String = "PK" & Chr(5) & Chr(6)
        Header = Header.PadRight(22, Chr(0))
        My.Computer.FileSystem.WriteAllBytes(Filename, Encoder.GetBytes(Header), False)
    End Sub

    Private Sub ZipFile(ByVal Input As String, ByVal Filename As String)
        Dim oShell As New Shell32.Shell
        CreateZipFile(Filename)
        oShell.NameSpace(Filename).CopyHere(Input)
    End Sub


Het prbleem is.. Hoe kan ik een wachtlus in bouwen die checkt of de Sub Zipfile klaar is voordat hij verder gaat. Blijkbaar zoals het nu loopt is hij nog bezig met de zipfile vullen terwijl hij meteen de directory weggooid. :'(

Ben pas net bezig om dit een beetje door te krijggen en kom al een eindje. Maar dit gaat me nu even te ver. Misschien dat iemand van jullie een tip heeft voor me. _/-\o_

PS5 User ;-) ...


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
:?
Ten eerste doet die "(Create)ZipFile" sub niks zinnigs; zo ver ik kan zien plakt 'ie alleen PK en wat andere header bytes voor een bestand; er wordt niks gezipped. Het wordt hooguit (maar dat zou ik even moeten proberen) een bestand gemaakt met 0 compressie (en dus zelfs overhead omdat je er een header aan plakt). Rename dan gewoon de file naar .zip ofzo :? Ik vind zojuist 'de trick' op internet (zie iets verderop over 'geleende code). Wat een ranzige manier zeg :X

Verder heb je het in je topic-title over VBS, en in je topic zelf over VB Programma. Dat is nogal een verschil; aan je code te zien ("Filename As String") heeft het dus niets met VBS te maken, maar bijvoorbeeld "System.Text.ASCIIEncoding" is dan weer VB.Net code. Weer iets anders dus.

Ik ben niet bekend met Shell32.Shell's CopyHere functie maar ik kan me voorstellen dat die ASync wordt uitgevoerd. In dat geval zul je moeten kijken of je op 1 of andere manier (Event, Callback, Status property pollen ofzo) de status kunt opvragen danwel terugkrijgen maar ik acht de kans klein gezien de (waarschijnlijk) simpele 'Shell32'-wrapper functionaliteit. Ik vraag me dan ook af waarom je niet gewoon een aantal native .Net functies daarvoor gebruikt in plaats van naar Shell32 te grijpen. Nu ik "de magic trick" begrijp zie ik iig waarom het zo (ranzig :X ) wordt gedaan :X

Ik mis verder in je topic wat je al hebt gezocht, gevonden en geprobeerd en wat er dan niet werkte. Ook mis ik alle onderbouwing van je code en ben ik zelfs na 2 seconden tot de conclusie gekomen dat de code 'geleend' is. Als je support zoekt op code van derden dan dien je contact op te nemen met die derden (zeker als je niet weet wat het precies doet). Hier in PRG hebben we het over zélf programmeren.

De ranzige thedailywtf-methode zou zijn: DeleteFolder in een lus gooien met try-catch tot je geen fout meer krijgt :P

[ Voor 14% gewijzigd door RobIII op 01-11-2007 19:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
RobIII schreef op donderdag 01 november 2007 @ 18:48:
:?
Ten eerste doet die "(Create)ZipFile" sub niks zinnigs; zo ver ik kan zien plakt 'ie alleen PK en wat andere header bytes voor een bestand; er wordt niks gezipped. Het wordt hooguit (maar dat zou ik even moeten proberen) een bestand gemaakt met 0 compressie (en dus zelfs overhead omdat je er een header aan plakt). Rename dan gewoon de file naar .zip ofzo :?
Als het om meerdere bestanden gaat kun je op de commandline ook gewoon zoiets doen:
copy file.txt+file2.jpg+file3.txt output.txt


Heb geen windows bak om te kijken wat er allemaal gebeurt en hoe je 't uit elkaar haalt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
PrisonerOfPain schreef op donderdag 01 november 2007 @ 19:05:
[...]


Als het om meerdere bestanden gaat kun je op de commandline ook gewoon zoiets doen:
copy file.txt+file2.jpg+file3.txt output.txt


Heb geen windows bak om te kijken wat er allemaal gebeurt en hoe je 't uit elkaar haalt.
Dan heb je dus 1 file met een brei aan files erin. Lekker zinnig als je niet weet hoe/waar je ze weer moet splitten :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
Sorry. De topic titel is mij fout.. Voor dat iki er erg in had ik er VBS neer gezet i.p.v VB.. Mijn Fout.

Maar het stukje wat je ziet, is onderdeel van een groot geheel.
Wat ik doe in het vb script.

Ik verwijder uit active directory een gebruiker, maar ik voodat hij alles weggooid bepaalde gevens van hem zippen en ergens anders opslaan. Ik heb al verschillende methodes gebruikt maar geen was prima.
Dit stukje script doet precies wat ik wil. Hij maakt een leeg zip bestand aan. (Create zip) en daarna kopieert hij de gevens uit de opgegeven directory in het zip bestand. Dit werkt prima..

Alleen kan ik geen event afvangen. Hij gaat meteen door met het script aansturen en aangezien de volgende opdracht een delete van die directory is, geeft hij dus een fout.,
Heb vandaag al de gehele dag naar een oplossing gezocht zowel in de boeken als via google.

Alleen vind ik geen andere oplossing. Dat komt natuurlijk ook omdat ik een beginner ben met Visual Studio 2005. Maar verder werkt mijn Beheer proggie prima.. Tenminste de onderdelen die af zijn. Maar met deze wil het dus niet lukken.

PS5 User ;-) ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:04
Je zip-file is toch gewoon geen zip file ? :?
Zou je eens niet naar SharpZipLib kijken bv ?

Welke foutmelding krijg je bij het deleten van die directory ? Waarschijnlijk zijn er nog bestanden in gebruik.

https://fgheysels.github.io/


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
whoami schreef op donderdag 01 november 2007 @ 21:15:
Je zip-file is toch gewoon geen zip file ? :?
Zou je eens niet naar SharpZipLib kijken bv ?

Welke foutmelding krijg je bij het deleten van die directory ? Waarschijnlijk zijn er nog bestanden in gebruik.
Nee.. erger nog.. Hij heeft de directory al weggegooid. Terwijl hij nog aan het zippen is.

Maar die file is dus wel degelijk een zip file. Hij maakt gewoon gebruik van de mogelijkheden van de zip functionaliteit van Windows XP, Vista en 2003

PS5 User ;-) ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:04
Hij heeft de directory al weggegooid. Terwijl hij nog aan het zippen is.
:?
Lijkt me stug. Ik zie je nergens een async method aanroepen ?

[ Voor 38% gewijzigd door whoami op 01-11-2007 21:30 ]

https://fgheysels.github.io/


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
whoami schreef op donderdag 01 november 2007 @ 21:23:
:?
Lijkt me stug. Ik zie je nergens een async method aanroepen ?
Wat ik gevonden heb via internet, is dat hij de call vanuit de Shell32.dll doet.
Je kan namelijk van uit windows ook gewoon een zip file aanmaken (Compressed file).
Die wordt gebruikt.. (Hoop dat ik zo duidelijk ben als leek.)

PS5 User ;-) ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:04
Ik had het hier over:
Hij heeft de directory al weggegooid. Terwijl hij nog aan het zippen is.
:P

https://fgheysels.github.io/


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
Oeps |:(

Nee. Dat is juist het probleem... Hij kijkt verder nergens naar. Krijg dus ook een fout medeling dat hij de directory niet meer kan vinden. Logisch.. Die wordt onder zijn neus weggegooid.

Weet dus niet hoe ik nu een check kan inbouwen om dat te voor komen. Heb al wel gezocht, maar niets gevonden.. Ben erg nieuw in VB.Net. Dus dat is eigenlijk mijn probleem.
Op zich doet hij het wel goed... Maar blijkbaar wacht hij dus niet en als hij aan het zippen is gaat hety script gewoon verder.

PS5 User ;-) ...


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:04
Tja, dan moet het zijn dat die CopyHere method asynchroon wordt uitgevoerd. Dat is de enige verklaring lijkt me.

Als ik jou was, zou ik een manier zoeken waarmee je meer controle hebt over hoe je die zip-file gaat creeëren (bv door sharpziplib of een andere library te gebruiken).
(Of kijken of je die CopyHere method niet synchroon kunt uitvoeren, of eens kijken of er geen manier is om te weten of de CopyHere method voltooid is of niet).

Dit zou je ook op weg kunnen helpen.
Hier doen ze ongeveer hetzelfde als wat jij wil; al vind ik het ranzig.

[ Voor 18% gewijzigd door whoami op 01-11-2007 22:00 ]

https://fgheysels.github.io/


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
whoami schreef op donderdag 01 november 2007 @ 21:58:
Tja, dan moet het zijn dat die CopyHere method asynchroon wordt uitgevoerd. Dat is de enige verklaring lijkt me.

Als ik jou was, zou ik een manier zoeken waarmee je meer controle hebt over hoe je die zip-file gaat creeëren (bv door sharpziplib of een andere library te gebruiken).
(Of kijken of je die CopyHere method niet synchroon kunt uitvoeren, of eens kijken of er geen manier is om te weten of de CopyHere method voltooid is of niet).

Dit zou je ook op weg kunnen helpen.
Hier doen ze ongeveer hetzelfde als wat jij wil; al vind ik het ranzig.
Bedankt. Ik ga morgen zeker eens kijken naat de sharpziplib.. Kijken of dat beter gaat.
Het wil namelijk met de huidige methode niet lukken..

In ieder geval bedankt voor de tips.

PS5 User ;-) ...


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
whoami schreef op donderdag 01 november 2007 @ 21:58:
Tja, dan moet het zijn dat die CopyHere method asynchroon wordt uitgevoerd. Dat is de enige verklaring lijkt me.

Als ik jou was, zou ik een manier zoeken waarmee je meer controle hebt over hoe je die zip-file gaat creeëren (bv door sharpziplib of een andere library te gebruiken).
(Of kijken of je die CopyHere method niet synchroon kunt uitvoeren, of eens kijken of er geen manier is om te weten of de CopyHere method voltooid is of niet).

Dit zou je ook op weg kunnen helpen.
Hier doen ze ongeveer hetzelfde als wat jij wil; al vind ik het ranzig.
Ik denk dat het zippen in een extern process gestart wordt en daarom het huidige process direct doorgaat. Daarom zal je op de een of andere manier een WaitForExit moeten doen.

Denk dat je hiermee wel verder moet komen: http://www.codeproject.co...compressWinShellAPICS.asp (ok, whoami geeft ook al zo'n hint).

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • supernova
  • Registratie: Augustus 2000
  • Laatst online: 27-11 20:33

supernova

Zabbix specialist 7 ;-)

Topicstarter
Heb nu de sharpziplib gebruikt en dit gaat perfect. _/-\o_
Bedankt allemaal voor jullie suggesties. 8)

Modjes.. Deze kan gesloten worden.... :P

[ Voor 17% gewijzigd door supernova op 02-11-2007 12:35 ]

PS5 User ;-) ...

Pagina: 1