Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Un metodo per fare copie incrementali di file, con Visual Basic

Può capitare la necessità di fare modifiche ad un file esistente in una data successiva a quella consentita per l'ultima modifica. In casi come questo si può aver bisogno di fare delle copie "incrementali" del file per tenere una traccia storica delle modifiche, ossia avere il nuovo, quello appena modificato, ma mantenere tutte le copie dei vecchi, in una condizione del tipo File.txt, File_VecchieModifiche_001.txt, File_VecchieModifiche_002.txt e così via.

L'operazione non è particolarmente complessa, si può scrivere un metodo che, dato il nome del file originario, utilizza un indice intero che viene incrementato di una unità nel caso in cui venga rilevata l'esistenza di un file con lo stesso nome. Ecco il codice:

    'FileName è il nome del file originario, es. File.txt
    Private Function GetUniqueFilename(ByVal FileName As StringAs String
        Dim count As Integer = 0    'un contatore
        Dim Name As String = String.Empty

        'Se il file originario esiste...
        If System.IO.File.Exists(FileName) Then

            'Ottiene info di dettaglio sul file
            Dim currentFileInfo As New System.IO.FileInfo(FileName)
            'Se ha estensione...
            If Not String.IsNullOrEmpty(currentFileInfo.Extension) Then
                'prende la parte del file senza estensione
                Name = currentFileInfo.FullName.Substring(0, currentFileInfo.FullName.LastIndexOf("."c))
            Else
                'altrimenti utilizza il nome del file corrente
                Name = currentFileInfo.FullName
            End If

            'Itera finché il nome del file esiste
            While IO.File.Exists(FileName)
                count += 1

                'OCCHIO: Ripensarlo con StringBuilder invece che come concatenazione di stringhe, scelta per velocità
                FileName = Name + "_" + count.ToString() + currentFileInfo.Extension
            End While
        End If

        Return FileName
    End Function

L'utilizzo è molto semplice, si passa come argomento del metodo il nome del file di partenza:

        'Se esite, restituirà File_1.txt
        'Se quest'ultimo esiste, restituirà File_2.txt e così via..
        Dim fileUnivoco = GetUniqueFilename("C:\File.txt")

Ci possono essere alternative anche migliori, ma questo è ciò che è stato richiesto a me di fare :-)

Alessandro

Print | posted on martedì 2 novembre 2010 17:07 | Filed Under [ Visual Basic ]

Powered by:
Powered By Subtext Powered By ASP.NET