vb.net ファイル操作クラス

48 篇文章 1 订阅
45 篇文章 0 订阅
Imports System.IO
Imports System.IO.Compression


Public Class FileOperate
    ''' <summary>
    ''' 指定したフォルダ下に、ファイルを圧縮する
    ''' </summary>
    ''' <param name="sourceFileFolderPath"></param>
    ''' <param name="targetFileFolderPath"></param>
    ''' <param name="zipFileName"></param>
    ''' <remarks></remarks>
    Public Shared Sub ZipFileToDirectory(ByVal sourceFileFolderPath As String, ByVal targetFileFolderPath As String, ByVal zipFileName As String)
        ZipFile.CreateFromDirectory(sourceFileFolderPath, targetFileFolderPath & zipFileName, CompressionLevel.Fastest, False)
    End Sub


    ''' <summary>
    ''' ZIPファイルを指定したフォルダ下に解凍する
    ''' </summary>
    ''' <param name="zipFilePath"></param>
    ''' <param name="extractFilePath"></param>
    ''' <remarks></remarks>
    Public Shared Sub ExtractZipFileToDirectory(ByVal zipFilePath As String, ByVal extractFilePath As String)
        ZipFile.ExtractToDirectory(zipFilePath, extractFilePath)
    End Sub


    ''' <summary>
    ''' 指定したフォルダ下に、ファイル有無の判断
    ''' </summary>
    ''' <param name="folderPath">指定したフォルダパル</param>
    ''' <returns>true:ファイル有る、false:ファイル無し</returns>
    ''' <remarks></remarks>
    Public Shared Function IsExistsFileInFolder(ByVal folderPath As String) As Boolean
        Dim fso = CreateObject("Scripting.FileSystemObject")


        If fso.GetFolder(folderPath).Files.Count = 0 Then
            '不存在
            Return False
        Else
            '存在
            Return True
        End If


    End Function


    ''' <summary>
    ''' 指定したフォルダ下のファイルを削除する
    ''' </summary>
    ''' <param name="deleteFileFolderPath"></param>
    ''' <param name="fileType">*.*(全て)/*.csv(csvファイルだけ)など</param>
    ''' <remarks></remarks>
    Public Shared Sub DeleteAllFillInDirectory(ByVal deleteFileFolderPath As String, ByVal fileType As String)


        For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
                    deleteFileFolderPath, _
                    FileIO.SearchOption.SearchAllSubDirectories, _
                    fileType)


            My.Computer.FileSystem.DeleteFile(foundFile, _
                FileIO.UIOption.OnlyErrorDialogs, _
                FileIO.RecycleOption.DeletePermanently)
        Next


    End Sub


    ''' <summary>
    ''' ファイルのコピー
    ''' </summary>
    ''' <param name="sourceFilePath">元ファイルパス</param>
    ''' <param name="targetFilePath">目標ファイルパス</param>
    ''' <remarks></remarks>
    Public Shared Sub CopyFile(ByVal sourceFilePath As String, ByVal targetFilePath As String)
        '\\コンピュータ名\共有名\(ディレクトリ名\)ファイル名
        ' 既に同名のファイルが存在していても上書きする場合
        System.IO.File.Copy(sourceFilePath, targetFilePath, True)
    End Sub


    ''' <summary>
    ''' フォルダ下のファイル全てコピーする
    ''' </summary>
    ''' <param name="sourceFolderPath"></param>
    ''' <param name="targetFolderPath"></param>
    ''' <remarks></remarks>
    Public Shared Sub CopyAllFiles(ByVal sourceFolderPath As String, ByVal targetFolderPath As String)
        My.Computer.FileSystem.CopyDirectory(sourceFolderPath, targetFolderPath, True)
    End Sub


    ''' <summary>
    ''' ファイルの移動
    ''' </summary>
    ''' <param name="sourceFolderPath"></param>
    ''' <param name="targetFolderPath"></param>
    ''' <remarks></remarks>
    Public Shared Sub MoveAllFiles(ByVal sourceFolderPath As String, ByVal targetFolderPath As String)
        My.Computer.FileSystem.CopyDirectory(sourceFolderPath, targetFolderPath, True)
        DeleteAllFillInDirectory(sourceFolderPath, "*.csv")
    End Sub


    ''' <summary>
    ''' フォルダサイズの取得
    ''' </summary>
    ''' <param name="dirInfo"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetDirectorySize( _
    ByVal dirInfo As DirectoryInfo) As Long
        Dim size As Long = 0


        'フォルダ内の全ファイルの合計サイズを計算する
        Dim fi As FileInfo
        For Each fi In dirInfo.GetFiles()
            size += fi.Length
        Next fi


        'サブフォルダのサイズを合計していく
        Dim di As DirectoryInfo
        For Each di In dirInfo.GetDirectories()
            size += GetDirectorySize(di)
        Next di


        '結果を返す
        Return size
    End Function


    ''' <summary>
    ''' フォルダ内、最新のファイル名を取得する
    ''' </summary>
    ''' <param name="targetFolderPath"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetLatestFileName(ByVal targetFolderPath As String)


        Dim fso, fol, fc, f1, f2
        fso = CreateObject("Scripting.FileSystemObject")
        fol = fso.GetFolder(targetFolderPath)
        fc = fol.Files
        For Each f1 In fc
            If f2 Is Nothing Then
                f2 = fso.GetFile(f1)
            End If
            If f1.DateLastModified > f2.DateLastModified Then
                f2 = fso.GetFile(f1)
            End If
        Next
        Return f2.Name
    End Function


    ''' <summary>
    ''' CSVファイルの先頭行を削除する
    ''' </summary>
    ''' <param name="filePath"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function DeleteCSVHeader(ByVal filePath As String) As Boolean
        Try
            'ファイルを読み込みで開く
            Dim sr As New System.IO.StreamReader(filePath, System.Text.Encoding.GetEncoding("shift_jis"))
            '一時ファイルを作成する
            Dim tmpPath As String = System.IO.Path.GetTempFileName()
            '一時ファイルを書き込みで開く
            Dim sw As New System.IO.StreamWriter(tmpPath, False, System.Text.Encoding.GetEncoding("shift_jis"))


            Dim isFirstLine As Boolean = True
            '内容を一行ずつ読み込む
            While sr.Peek() > -1
                '一行読み込む
                Dim line As String = sr.ReadLine()
                'はじめの行であれば、飛ばす
                If isFirstLine Then
                    isFirstLine = False
                    Continue While
                End If
                '一時ファイルに書き込む
                sw.WriteLine(line)
            End While
            '閉じる
            sr.Close()
            sw.Close()


            '一時ファイルと入れ替える
            System.IO.File.Copy(tmpPath, filePath, True)
            System.IO.File.Delete(tmpPath)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function


    ''' <summary>
    ''' ファイルとフォルダ操作権限有無の判断
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function FileOrFolderIsReadOnly(ByVal path As String)
        ' ファイルやディレクトリの属性(群)を取得
        Dim fas As System.IO.FileAttributes = System.IO.File.GetAttributes(path)
        ' 属性(群)の中に読み取り専用があるかどうかを確認(ビット演算)
        Dim bReadOnly As Boolean = ((fas And System.IO.FileAttributes.ReadOnly) = System.IO.FileAttributes.ReadOnly)
        Return bReadOnly
    End Function


    ''' <summary>
    ''' ファイルがロック中かどうかの判断
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function FileIsLocked(ByVal path As String)
        Dim stream As FileStream = Nothing
        Try
            stream = New FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
            stream.Close()
        Catch ex As Exception
            Return True
        End Try
        stream.Close()
        Return False
    End Function


    ''' <summary>
    ''' ファイル読み込み専用属性解除
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function ReleaseReadAttr(ByVal path As String) As Boolean
        Try
            Dim fi As New System.IO.FileInfo(path)
            '読み込み専用属性があるか調べる
            If (fi.Attributes And System.IO.FileAttributes.ReadOnly) = System.IO.FileAttributes.ReadOnly Then
                '読み取り専用属性を解除する
                fi.IsReadOnly = False
            End If
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function


    ''' <summary>
    ''' ファイルのサイズを確認
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetFileSize(ByVal path As String)
        Dim file As New System.IO.FileInfo(path)
        Return file.Length
    End Function


    ''' <summary>
    ''' ディレクトリアクセスチェック
    ''' </summary>
    ''' <param name="path"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function FolderAccessCheck(ByVal path As String) As Boolean
        Try
            '実行ユーザ名取得
            Dim ident As System.Security.Principal.WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()
            Dim princ As New System.Security.Principal.WindowsPrincipal(ident)
            'ファイルアクセス権所持ユーザと比較
            Dim security As System.Security.AccessControl.DirectorySecurity = Directory.GetAccessControl(path)
            For Each rule As System.Security.AccessControl.FileSystemAccessRule In security.GetAccessRules(True, True, GetType(System.Security.Principal.NTAccount))
                If rule.IdentityReference.ToString = princ.Identity.Name Then
                    Return True
                End If
            Next
            Return False
        Catch ex As Exception
            Return False
        End Try
        Return False
    End Function
End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值