vb.net ファイル圧縮・解凍など

48 篇文章 1 订阅
45 篇文章 0 订阅
http://ajya.hatenablog.jp/entry/2015/08/21/060000
スポンサーリンク

.NET Framework 4.5からzip形式の圧縮/解凍ができるようになっている


スポンサーリンク

初期状態のままでは機能を利用できないので、プロジェクトに参照の追加を行います。

  • メニューから、[プロジェクト]-[参照の追加]を選ぶと、[参照マネージャー]が表示されます。
    [アセンブリ]-[フレームワーク]をクリックして、[System.IO.Compression.FileSystem]にチェックを入れて、[OK]ボタンをクリックします。
    f:id:AJYA:20150821054638p:plain

これで準備が完了し、操作ができるようになります。

次にソースコードです。
まずファイルの先頭で、次のように記述して、名前空間をインポートします。

Imports System.IO.Compression

zip形式ファイルを解凍するには、次のように記述します。

ZipFile.ExtractToDirectory("C:\test\test.zip", "C:\test\extract")

解凍先のフォルダが存在するとエラーになるので、再利用する場合は、解凍前に削除しておきます。

zip形式にフォルダを圧縮するには、次のように記述します。

ZipFile.CreateFromDirectory("C:\test\extract", "C:\test\test.zip")

圧縮後のファイルが存在した場合はエラーになるので、解凍時と同じように圧縮前に削除しておきます。

名前空間をインポートしない場合は、次のように記述します。

System.IO.Compression.ZipFile.ExtractToDirectory("C:\test\test.zip", "C:\test\extract")
System.IO.Compression.ZipFile.CreateFromDirectory("C:\test\extract", "C:\test\test.zip")



Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()

        '/ 指定したフォルダ下、ファイル有無の判断
        'Dim path As String = "D:\Test\既存フォルダ\判断フォルダ"
        'Dim ishavefile As Boolean = IsExistsFileInFolder(path)
        'If ishavefile Then
        '    MsgBox("存在")

        'Else
        '    MsgBox("不存在")
        'End If

        '/ 指定したフォルダ下のファイル全て削除する
        'DeleteAllFillInDirectory("D:\Test\親フォルダ", "*.csv")

        '/ 指定したフォルダ下のファイル全て削除する
        CopyFile("D:\Test\既存フォルダ\元データ1.csv", "D:\Test\親フォルダ\元データ1.csv")


        '/ ++ファイル圧縮と解凍
        ' ''(指定したフォルダ下のファイルを圧縮する)
        'Dim startPath As String = "D:\Test\既存フォルダ"
        'Dim zipPath As String = "D:\Test\親フォルダ"
        'Dim extractPath As String = "D:\Test\親フォルダ"

        ' '' ファイルを圧縮する
        ''ZipFileToDirectory(startPath, zipPath, "result.zip")

        ' '' ファイルを解凍する
        'Dim zipPath2 As String = "D:\Test\親フォルダ\result.zip"
        'ExtractZipFileToDirectory(zipPath2, extractPath)
        ' ''--ファイル圧縮と解凍

    End Sub

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

    ''' <summary>
    ''' ZIPファイルを指定したフォルダ下に解凍する
    ''' </summary>
    ''' <param name="zipFilePath"></param>
    ''' <param name="extractFilePath"></param>
    ''' <remarks></remarks>
    Public 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 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 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 Sub CopyFile(ByVal sourceFilePath As String, ByVal targetFilePath As String)
        '\\コンピュータ名\共有名\(ディレクトリ名\)ファイル名
        ' 既に同名のファイルが存在していても上書きする場合
        System.IO.File.Copy(sourceFilePath, targetFilePath, True)
    End Sub

End Module
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值