LoginSignup
0
1

More than 3 years have passed since last update.

コピー先のファイル名が存在した場合、ファイル名の後ろに採番(ナンバリング)してコピーする方法

Last updated at Posted at 2021-05-13

コピー先に同名ファイルが存在していた場合、ファイル名を採番(ナンバリング)してコピーする方法を備忘録として残します。

やりたいこと

別のフォルダへコピー(コピー先に同名ファイルが存在しない場合は同じファイル名でコピー)
c:¥テスト.txt → c:¥サブフォルダ¥テスト.txt
上記のコピー後に、再度コピーした場合(同名ファイルが存在するためナンバリングでリネーム)
c:¥テスト.txt → c:¥サブフォルダ¥テスト (1).txt

環境

VB2019 (.Net 5.0)
Windows 10

Imports System.IO

Module Program
    Sub Main()
        fileCopy("D:\ソース\てすとふぁいる.txt", "D:\コピー先")
        ' D:\コピー先\てすとふぁいる.txt
        fileCopy("D:\ソース\てすとふぁいる.txt", "D:\コピー先")
        ' D:\コピー先\てすとふぁいる (1).txt
        fileCopy("D:\ソース\てすとふぁいる.txt", "D:\コピー先")
        ' D:\コピー先\てすとふぁいる (2).txt
    End Sub

    ''' <summary>
    ''' ファイルコピー(同名が存在する場合は採番)
    ''' </summary>
    ''' <param name="inSource">コピー元のフルパス</param>
    ''' <param name="inCopyPath">コピー先パス</param>
    Private Sub fileCopy(ByVal inSource As String, ByVal inCopyPath As String)
        Try
            Dim wkExt As String = System.IO.Path.GetExtension(inSource)
            Dim wkFile As String = System.IO.Path.GetFileNameWithoutExtension(inSource)
            Dim wkPath As String = System.IO.Path.GetFullPath(inCopyPath)

            ' 同名ファイルが存在する時は、ナンバリングしたファイル名で存在チェック
            Dim i As Integer = 0
            While System.IO.File.Exists(wkPath & "\" & wkFile & numStr(i) & wkExt)
                i += 1
            End While

            ' ファイルコピー
            System.IO.File.Copy(inSource, wkPath & "\" & wkFile & numStr(i) & wkExt, True)

        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' ナンバリング
    ''' </summary>
    ''' <param name="inNum">採番</param>
    ''' <returns></returns>
    Private Function numStr(ByVal inNum As Integer) As String
        Return If(inNum = 0, "", " (" & inNum & ")")
    End Function

End Module
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1