Avatar billede sigaard Nybegynder
23. december 2004 - 12:37 Der er 11 kommentarer og
1 løsning

Filflytteprogram hvordan?

Hey

Jeg ville gerne lave et program der har følgende krav:
1. skal kunne kopiere alt hvad der er i en mappe (eks: c:\fra\) til en anden (eks: c:\til\) hvert minut (eller lign. behøver ikke være præcist)
2. Der skal være en start og en stop knap, samt et text-felt hvor der er angivet om programmet er aktivt.

Det er den grundliggende funktionalitet. (På sigt ville jeg gerne udbygge med at der føres en log over hvilke filer der kopieret med tidspunkt) - (så er det sidste point hjemme ;o).

Håber jeg kan få et par pointers til udviklingen fra ekspertens mange hjælpsomme VB-stars (fedte, fedte :o)
Avatar billede arne_v Ekspert
23. december 2004 - 22:44 #1
Prøv og studer det her eksempel:

Imports System
Imports System.IO
Imports System.Drawing
Imports System.Windows.Forms

Public Class MainForm
Inherits Form
    Private status As Label
    Private start As Button
    Private abort As Button
    Private t As Timer

    Public Sub New()
        status = New Label
        start = New Button
        abort = New Button
        SuspendLayout
        status.Location = New Point(50, 50)
        status.Size = New Size(200, 50)
        status.Name = "Status TextBox"
        status.Font = New Font(FontFamily.GenericSerif, 24.0)
        status.Text = "Stopped"
        status.ForeColor = Color.Red
        start.Location = New Point (50, 150)
        start.Size = New Size (200, 50)
        start.Name = "Start Button"
        start.Text = "Start"
        AddHandler start.Click, AddressOf StartClick
        abort.Location = New Point (50, 250)
        abort.Size = New Size (200, 50)
        abort.Name = "Abort Button"
        abort.Text = "Abort"
        AddHandler abort.Click, AddressOf AbortClick
        ClientSize = New Size (300, 350)
        Controls.Add(status)
        Controls.Add(start)
        Controls.Add(abort)
        Name = "Main Form"
        Text = "Main Form"
        ResumeLayout(False)
        t = New Timer
        t.Interval = 60 * 1000
        AddHandler t.Tick, AddressOf DoIt
    End Sub
   
    Private Sub XCopy(dir1 As String, dir2 As String)
        Dim files As String() = Directory.GetFiles(dir1)
        For Each f As String In files
            File.Copy(f, dir2 & f.Substring(dir1.Length), True)
        Next
        Dim dirs As String() = Directory.GetDirectories(dir1)
        For Each d As String In dirs
            XCopy(d, dir2 & d.Substring(dir1.Length))
        Next
    End Sub

    Private Sub DoIt(ByVal sender As Object, ByVal e As EventArgs)
        XCopy("C:\fra", "C:\til")
    End Sub

    Private Sub StartClick(ByVal sender As Object, ByVal e As EventArgs)
        t.Start
        status.Text = "Started"
        status.ForeColor = Color.Green
    End Sub

    Private Sub AbortClick(ByVal sender As Object, ByVal e As EventArgs)
        t.Stop
        status.Text = "Stopped"
        status.ForeColor = Color.Red
    End Sub

    <STAThread()> _
    Public Shared Sub Main(ByVal args As String())
        Application.Run(New MainForm )
        Application.Exit
        Environment.Exit(0)
    End Sub
End Class
Avatar billede arne_v Ekspert
01. januar 2005 - 12:47 #2
Har du fået det til at virke ?
Avatar billede sigaard Nybegynder
03. januar 2005 - 07:43 #3
Jeg har ikke kigget på det mellem jul og nytår - vender snart tilbage når jeg lige har fået lidt luft... :o)
Avatar billede sigaard Nybegynder
03. januar 2005 - 08:19 #4
Har klippet XCopy delen ind i det jeg havde i forvejen og det virker super, men jeg ville gerne flytte og ikke kopiere...

Hvad gør i øvrigt anden del af af xcopy:
        Dim dirs As String() = Directory.GetDirectories(dir1)
        For Each d As String In dirs
            XCopy(d, dir2 & d.Substring(dir1.Length))
        Next
Så vidt jeg kan tyde er det meningen at mapper og undermapper i dir1 også flyttes!?

Hvis jeg tester med at oprette en mappe og en fil heri i c:\fra sker der ikke noget - de bliver ikke flyttet... (Håndteringen af undermapper er ikke så vigtig som at flytte i stedet for at kopiere :)
Avatar billede arne_v Ekspert
03. januar 2005 - 08:25 #5
Den anden del af XCopy tager netop undermapper med.
Avatar billede arne_v Ekspert
03. januar 2005 - 08:26 #6
Hvis du vil flytte i.s.f. at kopiere så kalder du bare File.Move i stedetfor
File.Copy.
Avatar billede arne_v Ekspert
03. januar 2005 - 08:31 #7
Har du oprettet C:\til ?
Avatar billede sigaard Nybegynder
03. januar 2005 - 08:47 #8
kopieringen af filer fra c:\fra til c:\til fungerer fint men hvis der er en undermappe i c:\fra kopieres intet herfra. Skal samme mappe være at finde i C:\til fra starten - altså være oprettet manuelt?
Avatar billede sigaard Nybegynder
03. januar 2005 - 08:56 #9
Her lige testet hvis undermapperne er tilstede i både fra og til flyttes filerne også der.

Lige et sidste spg er det muligt at styre hvilke filer der flyttes. Eksemepelvis hvis jeg vil have *.jpg og ikke andre?
Avatar billede arne_v Ekspert
03. januar 2005 - 09:19 #10
Hvis undermapper skal oprettes, så skal du nok kalde Directory.CreateDirectory
Avatar billede arne_v Ekspert
03. januar 2005 - 09:20 #11
Du kan angive en anden parameter til File GetFiles med "*.jpg"
Avatar billede sigaard Nybegynder
04. januar 2005 - 19:43 #12
Endnu et spg. Hvordan File.Move når filer er åbne eller eksisterer på destinationen?
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