Toon posts:

[VB.NET] Inner Exception foutmelding bij Array

Pagina: 1
Acties:

Onderwerpen


  • Anoniem: 411383
  • Registratie: Juni 2011
  • Niet online
Ik heb een probleem met een programma dat ik aan het schrijven ben.
Ik gebruik Allok Video to MP4 Converter om video's te converteren.
Allok veranderd hierbij (soms) de naam van het bestand.

Voorbeeld:
voorbeeld.(extensie) --> voorbeeld_creative0.avi

Dit gebeurt ook met _archos0.avi / _iriver0.avi / _ps3avc0.mp4

Ik ben nu een programma aan het schrijven dat deze toevoegingen uit de naam haalt.
Het stuk van de code dat de toevoeging verwijdert heb ik al geschreven en het werkt.
Nu wil ik een stuk schrijven dat automatisch controleert of er bestanden aangemaakt zijn met die toevoeging.
Dit doe ik door middel van een FileSystemWatcher.
Ik wil dat de FileSystemWatcher kijkt of een bestand dat is aangemaakt 1 van de 4 toevoegingen heeft.
Daarna moet de volledige naam in een array komen.
Die array wordt dan later doorgewerkt en alle namen daar in worden hernoemt.

Het stuk code dat de array gaat doorlopen heb ik al geschreven, maar de array blijft een foutmelding geven op het moment dat de naam toegevoegd moet worden.

Dit zijn de variabelen:
Visual Basic .NET:
1
2
3
Public Rerun() As String
Public TempRerun() As String
Public x As Integer


Dit is de sub waar het mis gaat.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub FileSystemWatcher_Created(ByVal sender As System.Object, ByVal e As System.IO.FileSystemEventArgs) Handles FileSystemWatcher.Created
        If e.Name.Contains("_archos0.avi") Or e.Name.Contains("_creative0.avi") Or e.Name.Contains("_iriver0.avi") Or e.Name.Contains("_ps3avc0.mp4") Then
            If PluginControl.Checked = True Then
                If Rerun.Length = 0 Then
                    Rerun(Rerun.Length) = e.FullPath
                    PluginTimer.Start()
                Else
                    Rerun(Rerun.Length) = e.FullPath
                End If
            End If
        End If
    End Sub

Ter informatie:
Regel 6 start een proces voor het doorlopen van de array Rerun()
Hier hoef ik geen tips of informatie over...

Met breakpoints heb ik achterhaald waar de foutmelding vandaan kwam.
De foutmelding kwam van regel 5 af.
In mijn poging om jullie de informatie te geven die er in de foutmelding stond, heb ik nogmaals geprobeerd hem te triggeren.
Vreemd genoeg gebeurde er nu niets, maar deed het programma ook niets (geen freeze up, maar er gebeurde niets wat volgens de code zou moeten gaan lopen...).
Wat ik nog weet is dat er iets was met een Inner Exception error.

Ik vermoed dat het komt doordat ik de lengte opvroeg van de array Rerun(), zonder dat er iets mee is gebeurt na het dimmen.
Maar dat zou niet verklaren waarom dezelfde situatie zojuist geen foutmelding meer gaf.
In de Immediate Window stond nog wel het volgende:
A first chance exception of type 'System.NullReferenceException' occurred in (project naam)
Kan iemand mij uitleggen of verklaren wat er is gebeurt of waarom er een foutmelding was?

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 28-05 20:52

Matis

Rubber Rocket

Weet je wel zeker dat het bestand bestaat. Met andere woorden, misschien returned e.FullPath null als het bestand niet bestaat.

If money talks then I'm a mime
If time is money then I'm out of time


  • Anoniem: 411383
  • Registratie: Juni 2011
  • Niet online
Het bestand bestaat, anders kan het ook niet een FileSystemWatcher.Created event geven.
Het bestand moet dan dus wel bestaan.
En het kan ook niet zo zijn dat er al een bestand bestaat met die naam, want ik heb dit getest met een test omgeving zonder dat Allok een video converteerde.
Met een applicatie van een vriend heb ik gekeken naar alle activiteiten die de FileSystemWatcher ontdekt en de enige bestanden die werden aangemaakt bevonden zich in de test omgeving.

EDIT:
Inmiddels wordt de foutmelding weer getoond.
Ik had een instelling veranderd waardoor de map niet bekeken werd door de FileSystemWatcher.

Ik heb door middel van MsgBox(variabel) uitgetest welke van de 2 variabelen in regel 5 een foutmelding geeft.
Zoals ik hierboven al vermelde, lag het niet aan de e.FullPath
Het probleem ontstaat bij het aanroepen van Rerun(Rerun.Length)
Ik ben nog aan het kijken wat er daarna mis gaat.

EDIT 2:
Ik heb alles al geprobeerd en kan er nog steeds niets aan doen.
Ik heb de lege Rerun.Length omzeild, Rerun() anders gedeclared (Public Rerun(100) as String) en de vakken van tevoren gevuld.
Niets helpt om de error te omzeilen.
Kan iemand mij nog een tip geven?
De enige andere mogelijkheid die ik zelf nog zie is om het hele script opnieuw te schrijven.

Zelfs als jullie geen oplossing kunnen bedenken zou ik nog graag willen weten waar de error vandaan komt.
Want tenslotte leer je het meest van je fouten :P

[Voor 172% gewijzigd door Anoniem: 411383 op 19-06-2011 00:35]


Acties:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 13:54

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Begin nou eens met het posten van de eigenlijke exception(melding). Je hebt 't steeds over "de error", maar wélke heb je nog niet gezegd. Dat "inner gebeuren" is gewoon dat de exception een "inner exception" bevat (of kan bevatten) die mogelijk meer informatie geeft. En als je met je debugger gewoon door de code heen stapt i.p.v. op willekeurige plaatsen breakpoints of messageboxes te gaan zetten moet je ook al een heel eind verder komen.

En nu ik de code nog eens bekijk: Waar geef je de grootte van de array uberhaupt op? Of waar resize (redim) je 'm waar nodig? Waarom gebruik je niet gewoon een List of string?

/edit:
Anoniem: 411383 schreef op zaterdag 18 juni 2011 @ 15:42:
Ik heb de lege Rerun.Length omzeild, Rerun() anders gedeclared (Public Rerun(100) as String) en de vakken van tevoren gevuld.
Ah; je initialiseert 'm nu op 100. Dat is natuurlijk ook nutteloos en gokwerk, maar allee, de eerste paar iteraties zouden moeten werken. Ik vraag me alleen af hoe je code er nu concreet uit ziet. Hoe weet je welke index je van de array wil gebruiken om er een filename in te zetten? Mogen we de (relevante stukken!) code eens zien?

[Voor 37% gewijzigd door RobIII op 19-06-2011 01:20]

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

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • Gimmeabrake
  • Registratie: December 2008
  • Laatst online: 23-05 09:56
Visual Basic .NET:
1
2
If Rerun.Length = 0 Then
   Rerun(Rerun.Length) = e.FullPath


Als de lengte van de array 0 is, heeft de array géén elementen. Dus ook geen element 0. Geen wonder dat je dan een exception krijgt ;)

Kun je hiervoor niet veel beter een List gebruiken? :)

  • Myri
  • Registratie: Maart 2010
  • Laatst online: 09:49
Geen idee of het met je probleem te maken heeft, maar aangezien ik ook al wel wat issues met de FileSystemWatcher heb gehad toch even vermelden:

Let ervoor op dat FileSystemWatcher gefired kan worden wanneer het bestand aangemaakt wordt, MAAR daarom nog niet volledig verwerkt is!
Stel ik kopieer een bestand, het bestand wordt aangemaakt en de FileSystemWatcher creëert een "Created"-event. Op die moment is dat bestand nog niet klaar voor verwerking (= leeg bestand), ik dien me dus eerst ervan te vergewissen dat het bestand kan geopend worden voor verdere verwerking. Dit doe je door het bestand exclusief te openen en daarna te closen. Als het bestand nog in verwerking is krijg je een error en kan je een .Sleep(x) aanroepen waarna je opnieuw probeert.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee