VB(A)

[VB.net] 파일 중복 시 이름 변경하여 업로드

당근쨈 2016. 7. 13. 18:38

저장할 폴더가 없으면 폴더를 생성하여

파일명이 중복되면 끝에 _1 _2 와 같이 숫자를 늘려가면서 복사하는 코드


    Private Sub C1Button2_Click(sender As Object, e As EventArgs) Handles C1Button2.Click

        '업로드 - 다른 이름으로 저장


        Dim strDest As String = "W:\Scan\"   '서버(다른 PC) 폴더명 - 수정할

        Dim i As ListViewItem

        Dim strFolder As String

        Dim strFilename As String

        Dim strExtention As String

        Dim strFullName As String

        Dim FileName As String


        '저장할 폴더가 없으면 생성하기

        If (Not Directory.Exists(strDest)) Then Directory.CreateDirectory(strDest)


        '업로드할 파일이 하나 이상 있을 코드 실행

        If lvView.Items.Count > 1 Then


            For Each i In lvView.Items


                '리스트뷰 순환하며 파일명 가져오기

                With i

                    strFolder = .SubItems(0).Text & "\"

                    strFilename = .SubItems(1).Text

                    strExtention = .SubItems(2).Text

                End With

                FileName = strFilename & strExtention

                strFullName = strFolder & FileName    '파일명 풀네임


                '중복 체크하면서 파일을 지정한 폴더에 복사

                File.Copy(strFullName, FileExistIncrementer(strDest & FileName))


            Next i

            MsgBox("업로드가 완료되었습니다.")

        End If


    End Sub


    Public Shared Function FileExistIncrementer(ByVal OrginialFileName As String) As String

        '중복된 파일 있을 파일명 변경

        '1.jpg 존재하면 1_1.jpg 바꿔서 업로드


        Dim counter As Integer = 0

        Dim NewFileName As String = OrginialFileName

        While File.Exists(NewFileName)

            counter = counter + 1

            NewFileName = String.Format("{0}\{1}_{2}{3}", Path.GetDirectoryName(OrginialFileName), Path.GetFileNameWithoutExtension(OrginialFileName), counter.ToString(), Path.GetExtension(OrginialFileName))

        End While

        Return NewFileName

    End Function