[VB2010] Muziek bestanden archiveren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
Hallo Tweakers!

Ik ben druk bezig met mijn eerste echt programma in Visual Basic 2010. De bedoeling van het programma is als volgt:
  • Gebruiker kan muziek bestanden toevoegen (per bestand of per gehele map) DONE
  • Bestanden moeten worden samengevoegd tot 1 bestand, die later weer uit elkaar gehaald kan worden.
Ik ben dat tweede van plan te doen door de source van bijvoorbeeld een mp3 bestand uit te lezen, en die met alle anderen bestanden samen te voegen in een XML-bestand. Dit moet er dan ongeveer zo uit zien:

XML:
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.1" encoding="UTF-8" ?>
<files>
     <file>
          <name>Muziek bestand 1.mp3</name>
          <source>De source van het desbetreffende muziek bestand desnoods met nog base64 eroverheen gehaald</source>
     </file>
     <file>
          <name>Muziek bestand 2.mp3</name>
          <source>De source van het desbetreffende muziek bestand desnoods met nog base64 eroverheen gehaald</source>
     </file>
</files>


Nou lukt het mij helaas niet om de source van het bestand uit te lezen. Ik heb verschillende methoden geprobeerd zoals Stream enzo, maar dan loopt het programma al vast bij 1 bestand, en het kunnen er wel 100x zo veel zijn.

Weet iemand misschien hoe ik dat kan proberen??

Tom

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waarom zou je in he-mels-naam een XML bestand gebruiken hiervoor :? Waarom geen Zip/rar/whatever? Die zijn daar veel beter voor geschikt.

Als je het dan toch, eigenwijs, wil doen (DON'T): besef dat het "binary files" zijn! En dat je binary data in XML als (bijv.) Base64 encoded string zult moeten opslaan*. En dat geeft alleen al een shitload aan overhead los van de overhead van XML.
* Oh, ik zie nu in je XML dat je dat al door had

By the way: Het is geen "source" maar gewoon "content", "inhoud", "data" of wat je wil. Maar geen 'source'.

Verder: Wat is "lukt me niet"? Krijg je foutmeldingen? En zo ja: welke? En waarom vermeld je die niet in je topicstart? En zo nee: wat lukt er dan niet? Etc. etc. -> Quickstart. Hou die voortaan even bij de hand als je een topic start ;)

[ Voor 55% gewijzigd door RobIII op 23-06-2010 16:08 ]

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


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

Wat RobIII dus al zegt: je bent nu een zip archive aan het nabouwen in XML :? Volgens mij kan je dan toch echt beter een .Net zip library (bijv. SharpZibLib) opzoeken en die gebruiken.

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
Ok, ik ga nu even kijken naar de SharpZipLib. Schijnt ook te moeten werken icm visual basic. Ik probeer het een en ander.

Edit:heb het aan de praat gekregen om de lib toe te voegen, nu nog het archief proberen te maken

[ Voor 29% gewijzigd door tomk94 op 23-06-2010 16:18 ]


Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
Oke, ik heb het een en ander geprobeerd en ik ben nu een stuk verder. Er wordt nu een archief aangemaakt door SharpZipLib. En daar worden alle bestanden ingeplaatst. Helaas krijg ik dan de gehele path naar het betreffende bestand in dat archief. Dus eerst de map C:/ en dan de map Users etc. Ik heb naar een oplossing gezocht, maar helaas weet ik niet waar ik op moet zoeken. Ik heb dus niks kunnen vinden. Misschien kunnen jullie een bron vinden die dit probleem oplost?

Hieronder staat de code waarover het gaat. Klik op de link onder de code om de gehele code te zien en niet alleen het stuk wat ik geplaatst heb.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
If (File.Exists(saveTo)) Then
                File.Delete(saveTo)
            End If
            Dim strmZipOutputStream As ZipOutputStream
            Dim astrFileNames() As String = Directory.GetFiles(tempFolder)
            strmZipOutputStream = New ZipOutputStream(File.Create(saveTo))
            strmZipOutputStream.SetLevel(9)
            Dim strFile As String
            Dim abyBuffer(4096) As Byte

            For Each strFile In astrFileNames
                Dim strmFile As FileStream = File.OpenRead(strFile)
                Try

                    Dim objZipEntry As ZipEntry = New ZipEntry(strFile)

                    objZipEntry.DateTime = DateTime.Now
                    objZipEntry.Size = strmFile.Length

                    strmZipOutputStream.PutNextEntry(objZipEntry)
                    StreamUtils.Copy(strmFile, strmZipOutputStream, abyBuffer)
                Finally
                    strmFile.Close()
                End Try
            Next
            strmZipOutputStream.Finish()
            strmZipOutputStream.Close()

            System.IO.Directory.Delete(tempFolder)

*weg*

Het is waarschijnlijk niet zo goede code, maar ik vind het er redelijk goed uitzien voor me eerste project.

[ Voor 1% gewijzigd door RobIII op 23-06-2010 19:58 ]


Acties:
  • 0 Henk 'm!

  • lordsnow
  • Registratie: Maart 2000
  • Laatst online: 21:07

lordsnow

I know nothing

tomwebfreak schreef op woensdag 23 juni 2010 @ 15:55:
  • Bestanden moeten worden samengevoegd tot 1 bestand, die later weer uit elkaar gehaald kan worden.
Waarom?

Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
Lang verhaal, het komt er op neer dat dit makkelijk is om later te verwerken in php.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Idd, maak gewoon een data-map aan, zet de properties van de files in je xml en zet de fysieke files in je data-map.

Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
Gomez12 schreef op woensdag 23 juni 2010 @ 19:23:
[...]

Idd, maak gewoon een data-map aan, zet de properties van de files in je xml en zet de fysieke files in je data-map.
Nope, gaat niet zomaar. Heb ik natuurlijk ook al over nagedacht. De webserver van de klant staat maar een aantal uploads per tijdsdeel toe. En zo is het mogelijk om 100 bestanden in een keer up te loaden. Is veel makkelijker. Heb klant al een aantal keer gezegd dat het makkelijker is een andere hoster te nemen. Maar dat wou die niet omdat hij hier zulke goede ervaring bij had.

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
tomwebfreak schreef op woensdag 23 juni 2010 @ 19:20:
[...]


Lang verhaal, het komt er op neer dat dit makkelijk is om later te verwerken in php.
*slik*

Je gaat gezipde bestanden waarin meerdere mp3 bestanden staan (laten we zeggen, 15 dus 60MB). maken met .Net en dan verwerken met php?

Is dit een (school) opdracht dus dat het maar zo moet? Anders is het misschien handig om je hele probleem even te posten zodat we met zijn allen even kunnen meedenken over welk probleem je aan het oplossen bent, en hoe je het beste dit probleem kunt oplossen. Dit klinkt een beetje gek in de orden namelijk (no offense).

Dat van die filenames komt waarschijnlijk omdat je de bestanden zipt met het hele path, ipv eerst een soort van sourcepath te zetten (of een of andere optie om relative paths te gebruiken). Dit is vast te vinden in de documentatie van de door jou gebruikte library :).

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
tomwebfreak schreef op woensdag 23 juni 2010 @ 19:10:
*weg*

Het is waarschijnlijk niet zo goede code, maar ik vind het er redelijk goed uitzien voor me eerste project.
Euh, het is hier niet de bedoeling dat wij voor je gaan debuggen (dat leer je zelf maar: Debuggen: Hoe doe ik dat?) of je handje vast gaan houden. 200+ regels code dumpen zodat wij de fout kunnen aanwijzen voor je of een fix kunnen opperen gaat dus niet gebeuren (quickfix).
Verder is het gewoon een kwestie van gewoon documentatie lezen voor wat betreft je paden. En je hebt in principe heel die Sharpdinges niet eens nodig, .Net biedt native ook diverse compressiemethodes.

Verder heb ik, net als de poster boven mij, een beetje een raar gevoel in mijn buik dat je een...euh...vreemd pad bent ingeslagen ;)

[ Voor 22% gewijzigd door RobIII op 23-06-2010 20:03 ]

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


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
tomwebfreak schreef op woensdag 23 juni 2010 @ 19:28:
Nope, gaat niet zomaar. Heb ik natuurlijk ook al over nagedacht. De webserver van de klant staat maar een aantal uploads per tijdsdeel toe. En zo is het mogelijk om 100 bestanden in een keer up te loaden. Is veel makkelijker. Heb klant al een aantal keer gezegd dat het makkelijker is een andere hoster te nemen. Maar dat wou die niet omdat hij hier zulke goede ervaring bij had.
Sja, dat blijft moeilijk in zo'n geval, :/. Ik zou eerder kiezen voor een iets eenvoudiger oplossing - zip je bestanden in (al dan niet samen met een metadata bestand waar extra info over het bestand staat dat niet in de MP3 zelf kan - dit kan XML zijn) en upload ze, haal ze met een eenvoudig script ook weer uit elkaar. Dit uit elkaar halen zou je misschien met PHP kunnen doen, mits die niet het gehele bestand in het geheugen hoeft te laden om uit te pakken. Het metadata bestand zou je in een database kunnen opslaan, de MP3's in de MP3 map, en de rest kun je met klassieke scripts doen (neem aan dat het een soort online MP3 opslag is).

Ik zou het niet als archiefbestand op de server houden en daar elk request uit halen, dat levert alleen maar problemen op. Het opslaan van de binaire data in XML is ook iets wat je zou moeten voorkomen.

Acties:
  • 0 Henk 'm!

  • tomk94
  • Registratie: Mei 2010
  • Laatst online: 18-09 18:57

tomk94

Developer

Topicstarter
YopY schreef op donderdag 24 juni 2010 @ 09:14:
[...]


Sja, dat blijft moeilijk in zo'n geval, :/. Ik zou eerder kiezen voor een iets eenvoudiger oplossing - zip je bestanden in (al dan niet samen met een metadata bestand waar extra info over het bestand staat dat niet in de MP3 zelf kan - dit kan XML zijn) en upload ze, haal ze met een eenvoudig script ook weer uit elkaar. Dit uit elkaar halen zou je misschien met PHP kunnen doen, mits die niet het gehele bestand in het geheugen hoeft te laden om uit te pakken. Het metadata bestand zou je in een database kunnen opslaan, de MP3's in de MP3 map, en de rest kun je met klassieke scripts doen (neem aan dat het een soort online MP3 opslag is).

Ik zou het niet als archiefbestand op de server houden en daar elk request uit halen, dat levert alleen maar problemen op. Het opslaan van de binaire data in XML is ook iets wat je zou moeten voorkomen.
sorry voor mijn zeer late reactie.

Ik heb er nu voor gezorgd dat in Visual Basic de muziekbestanden worden ingepakt, en deze wordt daarna via een commando in de administratie(PHP) uitpakt en de bestanden op de goede locatie zet en de locatie neerzet in de database.

Bedankt voor jullie tips.

Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Je 'oplossing' voor je voor mij onduidelijke probleem is volgens mij een goed voorbeeld voor de DailyWTF.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
flashin schreef op dinsdag 29 juni 2010 @ 17:50:
Je 'oplossing' voor je voor mij onduidelijke probleem is volgens mij een goed voorbeeld voor de DailyWTF.
Als voor jou het probleem onduidelijk is dan kun je natuurlijk ook moeilijk oordelen of het een WTF is. Daarbij voegt je opmerking niets toe aan dit topic en verzoek ik je bij deze dit soort opmerkingen voortaan dan ook achterwege te laten.

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


Acties:
  • 0 Henk 'm!

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 20:51

voodooless

Sound is no voodoo!

Ik ben nog steeds wel beniewd naar de rede om zelf in VB een zipper te maken (behalve dan dat het misschien een leermoment is geweest).

Alle nodige bestanden in een map copieren, ctrl-A, rechts klikken, willekeurige zipper context menu selecteren, en er een archief van maken. Dat is waarschijnlijk sneller en makkelijker dan een VB applicatie gebruiken.

Wil je er een "directory" bestandje bij maak dan gewoon een standaard playlist file: m3u of aanverwanten. Die kun je eenvoudig maken in een willekeurige audio player, en bevatten al een deel van de meta data. Lekker makkelijk.

Wil je dan toch wat automatiseren, maak dan een tool die een archief maakt van je platlist (m3u), en deze automagisch upload naar je website :)

TDWTF waardig: nee, ik zou niet weten waarom

[ Voor 3% gewijzigd door voodooless op 29-06-2010 20:37 ]

Do diamonds shine on the dark side of the moon :?


Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 19-09 15:37
[mierenneukermodus]
Visual Basic 2010 bestaat niet. Visual Studio 2010 en het bijbehorende Visual Basic (.NET) 10 (voor het .NET FW 4.0) wel :+
[/mierenneukermodus]

Persoonlijk vind ik de gekozen oplossing voor het probleem (veel bestanden tegelijk uploaden gaat niet, dus moeten de bestanden vooraf gezipt worden) helemaal niet TDWTF-waarding, iig niet zolang ik de code niet heb gezien.
Pagina: 1