Avatar billede morten_21 Nybegynder
03. september 2009 - 15:14 Der er 6 kommentarer

Begynder-hjælp til loop og filsletning

Jeg er igang med mit første projekt i Visual Basic 2008 Express, og det driller!

Funktionen er:
1 - Kald en ekstern .exe-fil, irfanview, der konverterer alle BMP filer i en mappe til JPG.

2 - Tjek for tilstedeværelsen af *.BMP, hvis de findes, så slet dem.

3 - Vent 2 minutter, kør det hele forfra, indtil man lukker programmet.

Her er hvad jeg har indtil nu:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  Dim Result
  Result = Shell("c:\scripts\i_view32.exe c:\scripts\*.bmp /convert=c:\scripts\*.jpg", 1) 'application path in normal state


        Dim fso
        fso = CreateObject("Scripting.FileSystemObject")
        fso.DeleteFile("c:\scripts\*.bmp", True)

    End Sub

End Class

Dvs. jeg mangler:

1 - at tjekke for tilstedeværelsen af *.BMP filer. Pt. kommer en Exception error hvis der ikke er BMP filer i mappen.

2 - putte det hele i et loop.

3 - lave en pause i loopet.

Nogen der kan sætte de sidste ting på plads?

Håber jeg har forklaret mig, ellers spørg! Jeg er meget ny i det her, så tal langsomt og tydeligt :-)
Avatar billede acg023 Nybegynder
04. september 2009 - 00:22 #1
Hej En løsning være som denne.

1. Brug DirectoryInfo.GetFile
2+3. Brug en timer

Er er en løsning til Windows Forms. På kanvaset er der to knapper på formen bStart og bStop, en timer Timer1 og en label Label1. De er trukket direkte ind.

koden bliver så:

Imports System.IO

Public Class Form1
    Private Sub bStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bStart.Click
        Timer1.Enabled = True
        Timer1.Interval = 2 * 60 * 1000
    End Sub

    Private Sub bStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bStop.Click
        Timer1.Enabled = False
    End Sub
    Public Sub DoWork()

        Dim dirInfo As DirectoryInfo
        dirInfo = New DirectoryInfo("c:\temp")
        If dirInfo.GetFiles("*.bmp").Count() = 0 Then
            Label1.Text = "ingen"
        Else
            ' Dim Result
            'Result = Shell("c:\scripts\i_view32.exe c:\scripts\*.bmp /convert=c:\scripts\*.jpg", 1) 'application path in normal state
            Label1.Text = "nogen"
            ' Slet filer
        End If
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        DoWork()
    End Sub
End Class

Hvis du gerne vil undgå bruger af timer, kan du bruge en

Do
    ...
    Thread.Sleep(2*60*1000)
while true
Avatar billede morten_21 Nybegynder
04. september 2009 - 10:09 #2
Hej! Tak for bidraget :)

Der sker ikke umiddelbart noget, når jeg kører dette. Jeg har sat en timer ind, de 2 knapper, og en label, og navngivet dem efter dit eksempel. BMP'erne bliver ikke konverteret, så det må betyde at kaldet til exe filen aldrig kommer.

Det slog mig, at jeg nok ikke skal slette filerne automatisk. Det kan jo være der kommer nye filer til, inden konverteringen er færdig. Så nu har jeg lavet en knap til at slette dem - virker fint :)

Så nu er det blot selve timeren der skal virke. Har læst om timeren på MSDN, men bliver ikke rigtig klogere..
Avatar billede morten_21 Nybegynder
04. september 2009 - 10:10 #3
Mht. Thread.Sleep, så hænger GUI'et mens forsinkelsen står på, så noget med en Timer er nok at foretrække :)
Avatar billede acg023 Nybegynder
05. september 2009 - 10:52 #4
På kanvaset skal du ind sætte tick eventet. Det finder du ved at vælge det lille lyn i properties og så angive funtionen Timer1_Tick på tick eventet.
Avatar billede morten_21 Nybegynder
05. september 2009 - 15:43 #5
Det står der allerede. Jeg prøver lige at paste det jeg har:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Timer1.Enabled = True
        Timer1.Interval = 2 * 60 * 1000
        Timer1.Start()



    End Sub

    Private Sub Button2_Click ...
    'funktion, der sletter BMP filer ved tryk på Button2


Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim Result
        Result = Shell("c:\scripts\i_view32.exe c:\scripts\*.bmp /convert=c:\scripts\*.jpg", 1) 'application path in normal state

    End Sub

End Class


Så har jeg trukket en Timer ud på kanvasset, under properties står (name) til Timer1, og under lynet (events) står den til Timer1_Tick.
Avatar billede morten_21 Nybegynder
05. september 2009 - 16:45 #6
Glemte at sige jeg har tilladt mig at fjerne start/stop funktionen :) Loopet skal køre hele tiden, lige fra man åbner programmet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester