Argument en ligne de commande

cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012 - 11 janv. 2012 à 12:21
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012 - 12 janv. 2012 à 15:58
Bonjour,

Je travail actuellement sur un projet VB.NET pour une copie de fichier seulement je dois faire une sauvegarde journalière des données.
J'ai essayé de me tourné vers un timer mais je n'ai pas vraiment confiance en sa fiabilité.
Je me suis donc tourné vers les tâches windows mais je ne suis pas arrivé à créer une tache par mon application.
Du coup je veux faire une récupération d'argument et mettre une condition afin d’exécuter ma procédure de copie. Cependant je ne sais pas comment mettre ma condition pour arriver à quelque chose comme :

If Command() = "-S" Then
            copie()
End If


merci pour vos réponses

19 réponses

NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
11 janv. 2012 à 13:06
Bonjour,

Pourquoi tu dis que le timer n'est pas fiable ?

Tu peux utiliser une date d'expiration, si elle expire, tu fais la copie et fixe la prochaine.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
11 janv. 2012 à 13:29
Pour le timer j'étais partie sur ça :

''index pour sauvegarde journalière
If ComboBox1.SelectedIndex = 2 Then

            If Date.Now.Hour.ToString DateTimePicker1.Text Or Date.Now.Minute.ToString DateTimePicker2.Text  Then

                copie()
       
            End If
End If


Mais il me copie X fois due à mon interval de 5000. Cependant il ne faut pas que ça en oublie une seule. C'est un petit programme que je vais mettre sur un serveur, donc il faut que la sauvegarde soit sûr. Ce programme, si il intègre le timer devra rester ouvert et ne pas planter ( il faudra aussi que je le réduise dans la barre des tache bien que je ne sache pas encore le faire ou alors faire un processus ?? ).
0
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
11 janv. 2012 à 13:52
Bonjour,

Du pourquoi, je te conseil d'utiliser une date d'expiration.

Prochaine copie=Actuellement+1 jour

Si date prochaine copie < Maintenant Alors
Copier
Prochaine copie=Actuellement+1 jour
Fin si

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
11 janv. 2012 à 15:54
voila ce que j'ai fait :
dans le timertick1

If ComboBox1.SelectedIndex = 2 Then
            If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If


dans le load un rajout :

prochaine_copie = Date.Now.Day


plus la déclaration de la variable globle dans la class :

Dim prochaine_copie As Integer
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
11 janv. 2012 à 16:05
Est-ce que quelqu'un pourrait confirmer si mon code est correct pour les sauvegardes semaines et mois ? :

If ComboBox1.SelectedIndex = 2 Then
            If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 1 Then
            If prochaine_copie 1 Or prochaine_copie 8 Or prochaine_copie = 15 Or prochaine_copie = 22 Or prochaine_copie = 29 And Date.Now.Hour.ToString = DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then
                copie()
            End If
        End If

        If ComboBox1.SelectedIndex = 0 Then
            If Date.Now.Hour.ToString DateTimePicker1.ToString And prochaine_copie 1 And Date.Now.Minute.ToString = DateTimePicker2.ToString Then
                copie()
            End If
        End If
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
11 janv. 2012 à 16:06
j'ai oublié deux fois :

prochaine_copie = Date.Now.Day + 1

mais à part ça, ça fonctionnerait ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
11 janv. 2012 à 18:53
Salut

If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then


pas clair
que veux tu dire ?
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
11 janv. 2012 à 22:11
Si prochaine_copie (numéro du jour) est égale au numéro d'aujourd'hui
et que l'heure actuelle est égale à l'heure indiquée par l'utilisateur dans le datetimepicker1
et que la minute actuelle est égale à la minute indiquée par le dateimepicher2
alors j’exécute la procédure copie puis ensuite j'incrémente de 1 prochaine_copie afin qu'une nouvelle copie se fasse le jour d'après.

J'ai mis le timer à 1000ms afin de ne rater aucune copie(s).

N'hésitez pas à me poser des questions ou a me suggérer des améliorations ! ;)

J'ai une 'dernière' étape à faire : un log de mes copies incluant l'heure et la date.
Je récupère déjà la date et l'heure mais je ne vois pas ou écrire ce fichier. Il faut prendre en compte que le programme peut être changé de place.
Peut-on intégrer un historique au programme ? faut-il écrire dans fichier qui se trouverait dans le dossier de l'utilisateur style applicationData ?
0
NHenry Messages postés 15151 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 septembre 2024 159
11 janv. 2012 à 23:12
Bonjour,

Pour connaitre l'emplacement de ton exe :
http://msdn.microsoft.com/en-us/library/aa457089.aspx

Pour la manipulations de fichiers :
Io.File.AppendText (et approchants)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 janv. 2012 à 10:09
Bonjour

Dim da As Date
Dim prochainnum As Integer
 da = DateTimePicker1.Value
  If (prochainnum Date.Now.Day) And (Date.Now.Hour da.Hour) And (Date.Now.Minute = da.Minute) Then



 End If
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 janv. 2012 à 10:56
Envoie le code que tu as écrit
qu'as tu écrit dans l'évenement tick
de ton timer ?
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
12 janv. 2012 à 12:55
Je mets tout le code :


Public Class Form1
    Dim nbfic As Integer
    Dim Chem_Rep_src As String
    Dim Chem_Rep_dest As String
    Dim ladate As String
    Dim prochaine_copie As Integer

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If CheckBox1.CheckState = CheckState.Checked Then
            SaveSetting("Sauvegarde", "Startup", "heure", DateTimePicker1.Value)
            SaveSetting("Sauvegarde", "Startup", "minute", DateTimePicker2.Value)
            SaveSetting("Sauvegarde", "Startup", "frequence", ComboBox1.SelectedItem.ToString)
            SaveSetting("Sauvegarde", "Startup", "checkbox", "1")
        Else
            SaveSetting("Sauvegarde", "Startup", "heure", Date.Now.ToString)
            SaveSetting("Sauvegarde", "Startup", "minute", Date.Now.ToString)
            SaveSetting("Sauvegarde", "Startup", "frequence", ComboBox1.SelectedIndex = 2)
            SaveSetting("Sauvegarde", "Startup", "checkbox", "0")
        End If
        NotifyIcon1.Visible = False
    End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    

        prochaine_copie = Date.Now.Day
        NotifyIcon1.ContextMenuStrip = ContextMenuStrip1 '// attach ContextMenu to NotifyIcon.

        TextBox1.Text = "Chemin non définit"
        TextBox2.Text = "Chemin non définit"
        Label5.Text = "-"
        Label7.Text = ""
        Label12.Text = "-"
        If Not Dir("file2data.exe", vbNormal) = "" Then
            MsgBox("Le fichier FIC vers MDB doit se trouver dans le dossier file2data")
            Me.Close()
        End If

        ComboBox1.Items.Add("Mensuel")
        ComboBox1.Items.Add("Hebdomadaire")
        ComboBox1.Items.Add("Journalier")
        ComboBox1.SelectedIndex = 2

        SetMyCustomFormat()

        DateTimePicker1.Value = GetSetting("Sauvegarde", "Startup", "heure", "")
        DateTimePicker2.Value = GetSetting("Sauvegarde", "Startup", "minute", "")
        ComboBox1.SelectedItem = GetSetting("Sauvegarde", "Startup", "frequence", "")

        If GetSetting("Sauvegarde", "Startup", "checkbox", "1") Then
            CheckBox1.CheckState = CheckState.Checked
        Else
            CheckBox1.CheckState = CheckState.Unchecked
        End If
    End Sub

    Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
        If e.Button = MouseButtons.Right Then NotifyIcon1.ContextMenuStrip.Show() '// Show ContextMenu on Right Mouse click.

    End Sub

    Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
        Me.Show()
        Me.WindowState = FormWindowState.Normal
        Me.Activate()
        Me.Focus()
    End Sub



    Public Sub SetMyCustomFormat()
        ' Set the Format type and the CustomFormat string.
        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "HH"

        DateTimePicker2.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "mm"

    End Sub
    Private Sub B_parcourir_in_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_parcourir_in.Click
        FolderBrowserDialog1.ShowDialog()
        If Not FolderBrowserDialog1.SelectedPath = Nothing Then
            TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString
            Chem_Rep_src = FolderBrowserDialog1.SelectedPath.ToString & ""
            Label5.Text = CompterFichiers(FolderBrowserDialog1.SelectedPath.ToString, "*.FIC")
            nbfic = Label5.Text
        End If




    End Sub

    Public Function CompterFichiers(ByRef vsFolder As String, ByRef vsPattern As String) As Integer
        Return My.Computer.FileSystem.GetFiles(vsFolder, FileIO.SearchOption.SearchTopLevelOnly, vsPattern).Count
    End Function

    Private Sub B_parcourir_out_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_parcourir_out.Click
        FolderBrowserDialog2.ShowDialog()
        If Not FolderBrowserDialog2.SelectedPath = Nothing Then
            TextBox2.Text = FolderBrowserDialog2.SelectedPath.ToString
            Chem_Rep_dest = FolderBrowserDialog2.SelectedPath.ToString & ""
        End If
    End Sub

    Private Sub B_convertir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_convertir.Click

        copie()
        
    End Sub

    Public Sub copie()
        Dim fichiersTrouves As String

        If TextBox1.Text = "Chemin non définit" Then
            MsgBox("Veuillez rentrer un dossier source")
        Else
            If TextBox2.Text = "Chemin non définit" Then
                MsgBox("Veuillez rentrer un dossier de destination")
            Else
                ' On fixe la valeur minimale de la ProgressBar
                ProgressBar1.Minimum = 0
                ' On fixe la valeur maximale de la ProgressBar
                ' le nombre de fichiers à copier donc
                ProgressBar1.Maximum = My.Computer.FileSystem.GetFiles(Chem_Rep_src, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.bat", "*.txt", "*.exe").Count
                ' On fixe sa valeur actuelle à 0
                ProgressBar1.Value = 0
                ' On fixe le pas de la ProgressBar
                ' c'est la valeur qui va être ajouter
                ' à Value dés qu'on utilise PerformStep
                ProgressBar1.Step = 1

                'Récupère les fichiers du dossier source et leurs extensions.
                For Each fichiersTrouves In My.Computer.FileSystem.GetFiles(Chem_Rep_src, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.bat", "*.txt", "*.exe")
                    'copie des fichiers vers le dossier de destination. Si les mêmes fichiers sont présent il les écrasent.
                    My.Computer.FileSystem.CopyFile(fichiersTrouves, Chem_Rep_dest & My.Computer.FileSystem.GetName(fichiersTrouves), True)

                    ' la quantité spécifiée par Step
                    ProgressBar1.PerformStep()
                Next
                Label7.Text = "terminé"
                Label12.Text = Date.Now
                Timer2.Enabled = True


            End If
        End If
    End Sub


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

        If ComboBox1.SelectedIndex = 2 Then
            If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 1 Then
            If prochaine_copie 1 Or prochaine_copie 8 Or prochaine_copie = 15 Or prochaine_copie = 22 Or prochaine_copie = 29 And Date.Now.Hour.ToString = DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 0 Then
            If Date.Now.Hour.ToString DateTimePicker1.ToString And prochaine_copie 1 And Date.Now.Minute.ToString = DateTimePicker2.ToString Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

    End Sub


    Private Sub FermerToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles FermerToolStripMenuItem.Click
        Me.Close()

    End Sub

    Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OuvrirToolStripMenuItem.Click
        Me.Show()
        Me.WindowState = FormWindowState.Normal
        Me.Activate()
        Me.Focus()

    End Sub

    Private Sub B_sauvegarde_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_sauvegarde.Click
        If TextBox1.Text = "Chemin non définit" Then
            MsgBox("Veuillez rentrer un dossier source")
        Else
            If TextBox2.Text = "Chemin non définit" Then
                MsgBox("Veuillez rentrer un dossier de destination")
            Else
                If B_sauvegarde.Text = "activé" Then
                    Timer1.Enabled = False
                    B_sauvegarde.Text = "désactivé"
                    B_sauvegarde.ForeColor = Color.Red
                    ComboBox1.Enabled = True
                Else
                    Timer1.Enabled = True
                    B_sauvegarde.Text = "activé"
                    B_sauvegarde.ForeColor = Color.Green
                    ComboBox1.Enabled = False
                End If

            End If
        End If
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        ProgressBar1.Value = 0
        Label7.Text = ""
        Timer2.Enabled = False
    End Sub

End Class
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 janv. 2012 à 13:30
au lieu de
If prochaine_copie = Date.Now.Day And Date.Now.Hour.ToString = DateTimePicker1.Text And Date.Now.Minute.ToString = DateTimePicker2.Text            



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


Dim da As Date
da = DateTimePicker1.Value
 If ComboBox1.SelectedIndex = 2 Then

  If prochaine_copie Date.Now.Day) And (Date.Now.Hour da.Hour) And (Date.Now.Minute = da.Minute) Then

'pareil pour les autres if


un autre problème
quand un des if va etre true et que tu copie
il va falloir stopper le timer ou mettre un boolean pour dire que c'est déja copier
dès que le timer a detecté le temps heure et minute
donc après
toutes les timer.interval un des if va etre executé jusqu'à que la minute change
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
12 janv. 2012 à 13:38
Pour le premier problème il s'agit d'une optimisation n'est-ce pas ?

L'autre problème que tu viens de m'énoncé est déjà résolu grâce à : "prochaine_copie = Date.Now.Day + 1"

Il me copie une fois et pas 60 car le jour de la date est incrémenté de 1, donc n'est plus égale à la date d'aujourd'hui.
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
12 janv. 2012 à 13:44
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim da1 As Date
        Dim da2 As Date
        da1 = DateTimePicker1.Value
        da2 = DateTimePicker2.Value

        If ComboBox1.SelectedIndex = 2 Then
            If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString da1.Hour And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 1 Then
            If prochaine_copie 1 Or prochaine_copie 8 Or prochaine_copie = 15 Or prochaine_copie = 22 Or prochaine_copie = 29 And Date.Now.Hour.ToString = da1.Hour And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 0 Then
            If Date.Now.Hour.ToString da1.Hour And prochaine_copie 1 And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

    End Sub
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 janv. 2012 à 13:55
pour le 1

DateTimePicker1.Text donne seulement la date
DateTimePicker1.value.hour 
- l'heure
DateTimePicker1.value.minute 
- la minute

pour le 2 ok
et
dans la sub copie
Try
       'Récupère les fichiers du dossier source et leurs extensions.
                For Each fichiersTrouves In My.Computer.FileSystem.GetFiles(Chem_Rep_src, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.bat", "*.txt", "*.exe")
                    'copie des fichiers vers le dossier de destination. Si les mêmes fichiers sont présent il les écrasent.
                    My.Computer.FileSystem.CopyFile(fichiersTrouves, Chem_Rep_dest & My.Computer.FileSystem.GetName(fichiersTrouves), True)

                    ' la quantité spécifiée par Step
                    ProgressBar1.PerformStep()
                Next
     
        Catch ex As Exception
MessageBox.Show(ex.Message)
        End Try

il n'y a plus qu'a faire subir des tests
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
12 janv. 2012 à 14:35
J'ai réglé datetimepicker1 sur heure et le dtp2 sur minute, donc ça marche.

Sinon j'ai trouvé un truc géniale que j'ai pu faire sans conditions et en une ligne : l'historique

'ajoute dans le fichier historique.txt les heures et la date des sauvegardes. Si le fichier n'existe pas il est créé sinon c'est ajouté à la ligne suivante.
                    File.AppendAllText(Application.StartupPath & "\historique.txt", Date.Now & Environment.NewLine)
0
cartman29 Messages postés 60 Date d'inscription dimanche 7 novembre 2010 Statut Membre Dernière intervention 4 août 2012
12 janv. 2012 à 15:58
Petite maj :


Imports System.IO

Public Class Form1
    Dim nbfic, prochaine_copie As Integer
    Dim Chem_Rep_src, Chem_Rep_dest As String


    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If CheckBox1.CheckState = CheckState.Checked Then
            SaveSetting("Sauvegarde", "Startup", "heure", DateTimePicker1.Value)
            SaveSetting("Sauvegarde", "Startup", "minute", DateTimePicker2.Value)
            SaveSetting("Sauvegarde", "Startup", "frequence", ComboBox1.SelectedItem.ToString)
            SaveSetting("Sauvegarde", "Startup", "checkbox", "1")
            SaveSetting("Sauvegarde", "Startup", "dossier_src", TextBox1.Text)
            SaveSetting("Sauvegarde", "Startup", "dossier_dest", TextBox2.Text)
        Else
            SaveSetting("Sauvegarde", "Startup", "frequence", ComboBox1.SelectedIndex = 2)
            SaveSetting("Sauvegarde", "Startup", "checkbox", "0")
        End If
        NotifyIcon1.Visible = False
    End Sub

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

        prochaine_copie = Date.Now.Day
        NotifyIcon1.ContextMenuStrip = ContextMenuStrip1 '// attach ContextMenu to NotifyIcon.

        TextBox1.Text = "Chemin non définit"
        TextBox2.Text = "Chemin non définit"
        Label5.Text = "-"
        Label7.Text = ""
        Label12.Text = "-"
        If Not Dir("file2data.exe", vbNormal) = "" Then
            MsgBox("Le fichier FIC vers MDB doit se trouver dans le dossier file2data")
            Me.Close()
        End If

        ComboBox1.Items.Add("Mensuel")
        ComboBox1.Items.Add("Hebdomadaire")
        ComboBox1.Items.Add("Journalier")
        ComboBox1.SelectedIndex = 2

        SetMyCustomFormat()


        ComboBox1.SelectedItem = GetSetting("Sauvegarde", "Startup", "frequence", "")

        If GetSetting("Sauvegarde", "Startup", "checkbox", "") = 1 Then
            CheckBox1.CheckState = CheckState.Checked
            DateTimePicker1.Value = GetSetting("Sauvegarde", "Startup", "heure", "")
            DateTimePicker2.Value = GetSetting("Sauvegarde", "Startup", "minute", "")
            Chem_Rep_src = GetSetting("Sauvegarde", "Startup", "dossier_src", "")
            Chem_Rep_dest = GetSetting("Sauvegarde", "Startup", "dossier_dest", "")
            TextBox1.Text = Chem_Rep_src
            TextBox2.Text = Chem_Rep_dest
        Else
            CheckBox1.CheckState = CheckState.Unchecked
            DateTimePicker1.Value = Date.Now.ToString
            DateTimePicker2.Value = Date.Now.ToString
        End If
    End Sub

    Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
        If e.Button = MouseButtons.Right Then NotifyIcon1.ContextMenuStrip.Show() '// Show ContextMenu on Right Mouse click.

    End Sub

    Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
        Me.Show()
        Me.WindowState = FormWindowState.Normal
        Me.Activate()
        Me.Focus()
    End Sub



    Public Sub SetMyCustomFormat()
        ' Set the Format type and the CustomFormat string.
        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "HH"

        DateTimePicker2.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "mm"

    End Sub
    Private Sub B_parcourir_in_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_parcourir_in.Click
        FolderBrowserDialog1.ShowDialog()
        If Not FolderBrowserDialog1.SelectedPath = Nothing Then
            TextBox1.Text = FolderBrowserDialog1.SelectedPath.ToString
            Chem_Rep_src = FolderBrowserDialog1.SelectedPath.ToString & ""
            Label5.Text = CompterFichiers(FolderBrowserDialog1.SelectedPath.ToString, "*.FIC")
            nbfic = Label5.Text
        End If

    End Sub

    Public Function CompterFichiers(ByRef vsFolder As String, ByRef vsPattern As String) As Integer
        Return My.Computer.FileSystem.GetFiles(vsFolder, FileIO.SearchOption.SearchTopLevelOnly, vsPattern).Count
    End Function

    Private Sub B_parcourir_out_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_parcourir_out.Click
        FolderBrowserDialog2.ShowDialog()
        If Not FolderBrowserDialog2.SelectedPath = Nothing Then
            TextBox2.Text = FolderBrowserDialog2.SelectedPath.ToString
            Chem_Rep_dest = FolderBrowserDialog2.SelectedPath.ToString & ""
        End If
    End Sub

    Private Sub B_convertir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_convertir.Click

        copie()

    End Sub

    Public Sub copie()
        Dim fichiersTrouves As String

        If TextBox1.Text = "Chemin non définit" Then
            MsgBox("Veuillez rentrer un dossier source")
        Else
            If TextBox2.Text = "Chemin non définit" Then
                MsgBox("Veuillez rentrer un dossier de destination")
            Else
                ' On fixe la valeur minimale de la ProgressBar
                ProgressBar1.Minimum = 0
                ' On fixe la valeur maximale de la ProgressBar
                ' le nombre de fichiers à copier donc
                ProgressBar1.Maximum = My.Computer.FileSystem.GetFiles(Chem_Rep_src, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.bat", "*.txt", "*.exe").Count
                ' On fixe sa valeur actuelle à 0
                ProgressBar1.Value = 0
                ' On fixe le pas de la ProgressBar
                ' c'est la valeur qui va être ajouter
                ' à Value dés qu'on utilise PerformStep
                ProgressBar1.Step = 1
                Try
                    'Récupère les fichiers du dossier source et leurs extensions.
                    For Each fichiersTrouves In My.Computer.FileSystem.GetFiles(Chem_Rep_src, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, "*.bat", "*.txt", "*.exe")
                        'copie des fichiers vers le dossier de destination. Si les mêmes fichiers sont présent il les écrasent.
                        My.Computer.FileSystem.CopyFile(fichiersTrouves, Chem_Rep_dest & My.Computer.FileSystem.GetName(fichiersTrouves), True)

                        ' la quantité spécifiée par Step
                        ProgressBar1.PerformStep()
                    Next
                    Label7.Text = "terminé"
                    Label12.Text = Date.Now
                    Timer2.Enabled = True

                    'ajoute dans le fichier historique.txt les heures et la date des sauvegardes. Si le fichier n'existe pas il est créé sinon c'est ajouté à la ligne suivante.
                    File.AppendAllText(Application.StartupPath & "\historique.txt", Date.Now & Environment.NewLine)

                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try

            End If
        End If
    End Sub


    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim da1, da2 As Date

        da1 = DateTimePicker1.Value
        da2 = DateTimePicker2.Value

        If ComboBox1.SelectedIndex = 2 Then
            If prochaine_copie Date.Now.Day And Date.Now.Hour.ToString da1.Hour And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 1 Then
            If prochaine_copie 1 Or prochaine_copie 8 Or prochaine_copie = 15 Or prochaine_copie = 22 Or prochaine_copie = 29 And Date.Now.Hour.ToString = da1.Hour And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

        If ComboBox1.SelectedIndex = 0 Then
            If Date.Now.Hour.ToString da1.Hour And prochaine_copie 1 And Date.Now.Minute.ToString = da2.Minute Then
                copie()
                prochaine_copie = Date.Now.Day + 1
            End If
        End If

    End Sub


    Private Sub FermerToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles FermerToolStripMenuItem.Click
        Me.Close()

    End Sub

    Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles OuvrirToolStripMenuItem.Click
        Me.Show()
        Me.WindowState = FormWindowState.Normal
        Me.Activate()
        Me.Focus()

    End Sub

    Private Sub B_sauvegarde_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_sauvegarde.Click
        If TextBox1.Text = "Chemin non définit" Then
            MsgBox("Veuillez rentrer un dossier source")
        Else
            If TextBox2.Text = "Chemin non définit" Then
                MsgBox("Veuillez rentrer un dossier de destination")
            Else
                If B_sauvegarde.Text = "activé" Then
                    Timer1.Enabled = False
                    B_sauvegarde.Text = "désactivé"
                    B_sauvegarde.ForeColor = Color.Red
                    ComboBox1.Enabled = True
                Else
                    Timer1.Enabled = True
                    B_sauvegarde.Text = "activé"
                    B_sauvegarde.ForeColor = Color.Green
                    ComboBox1.Enabled = False
                End If

            End If
        End If
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        ProgressBar1.Value = 0
        Label7.Text = ""
        Timer2.Enabled = False
    End Sub

End Class
0
Rejoignez-nous