tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB.netによる圧縮、解凍について
記事No2034
投稿日: 2005/08/26(Fri) 12:04
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
またお世話になります。
VB.NETによるzipでの圧縮解凍についてなのですが有益な情報が見つからずとまっております。
知識不足というのもあるのですが...
declare宣言でzip32.dllとzip32j.dllを宣言してまず圧縮ソフトを作りたいのですが,
Public Declare Function Zip Lib "Zip32j" _
                                (ByVal hWnd As Integer, _
                                ByVal szCmdLine As String, _
                                ByVal szOutPut As String, _
                                ByVal dwsize As Integer) As Integer
でzip()出呼び出せばよいまでは分かっているのですが、引数の設定が良く分からず困っております。
特にコマンドラインの部分の表記なのですが。。
どなたかご教授願えないでしょうか??

[ツリー表示へ]
タイトルRe: VB.netによる圧縮、解凍について
記事No2035
投稿日: 2005/08/26(Fri) 14:52
投稿者なおこ(・∀・)
お世話になります。

↓こちらの方法はもう目を通されましたでしょうか?
hhttp://dobon.net/vb/dotnet/links/createzipfile.html

[ツリー表示へ]
タイトルRe^2: VB.netによる圧縮、解凍について
記事No2036
投稿日: 2005/08/26(Fri) 16:20
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
> お世話になります。
>
> ↓こちらの方法はもう目を通されましたでしょうか?
> hhttp://dobon.net/vb/dotnet/links/createzipfile.html
早速レスありがとうございます!!目を通してあります。
ここのプログラム文だと、zipファイルを解凍すると書庫が壊れているとエラーがでてくるんですよね..
..
私だけでしょうか??
今はここのを参考にして作らせて頂いてますが、後々のためにもAPIでも行えるようにしたいので。
zip32.dllを利用した方法で何かご存知でしたらご教授願えると助かります。

[ツリー表示へ]
タイトルRe^3: VB.netによる圧縮、解凍について
記事No2037
投稿日: 2005/08/26(Fri) 16:47
投稿者なおこ(・∀・)
お世話になります。

> > ↓こちらの方法はもう目を通されましたでしょうか?
> > hhttp://dobon.net/vb/dotnet/links/createzipfile.html
> 早速レスありがとうございます!!目を通してあります。

それは大変失礼いたしました。m(_ _)m

> ここのプログラム文だと、zipファイルを解凍すると書庫が壊れているとエラーがでてくるんです

ね..
> 私だけでしょうか??

私も何かうまくいかなかった様な気がしますが,agehaさんと同じく自分だけだろうと思って
紹介しました。何でですかねぇ〜?

こんなのみつけました。(また既出でしたらごめんなさい)
hhttp://hpcgi2.nifty.com/lightbox/vector_lightbox.cgi?mid=PROvbFunction&id=030124182953
.basとか書いてありますし,ソース見た感じ.NETではなさそうですが
参考になりますでしょうか…。

[ツリー表示へ]
タイトルRe^4: VB.netによる圧縮、解凍について
記事No2038
投稿日: 2005/08/26(Fri) 17:29
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  

> 私も何かうまくいかなかった様な気がしますが,agehaさんと同じく自分だけだろうと思って
> 紹介しました。何でですかねぇ〜?
.NET FrameWorkでは問題がまだたくさんあるみたいですよ〜(と書いてありました(^^;))

> こんなのみつけました。(また既出でしたらごめんなさい)
> hhttp://hpcgi2.nifty.com/lightbox/vector_lightbox.cgi?mid=PROvbFunction&id=0301241829
53
> .basとか書いてありますし,ソース見た感じ.NETではなさそうですが
> 参考になりますでしょうか…。
かなり参考になりました!!さっそく組み込んでみましたがやはり.NETではないので修正が必要のよう
です。

Call ZipFreeze(Me.hWnd, "c:\temp", "d:\temp\list.txt", "zipのパス&qu
ot;)
                         を                                      
Call FD.ZipFreeze(Me.Handle.ToInt64, "c:\temp", c:\temp\list.txt, "c:\FD.ZIP&q
uot;)
に直してみましたがだめでした。。
1.まずme.hWndが.NETにはないので,上記のようにしましたが。。
2.ZIPのパスはフルパスでよいんでしょうか?
結果この先の文でZIP(API本体)を呼び出す部分でおちました。。。
いけると思ったんですが。。。。

[ツリー表示へ]
タイトルRe^5: VB.netによる圧縮、解凍について
記事No2039
投稿日: 2005/08/26(Fri) 17:58
投稿者なおこ(・∀・)
お世話になります。

> 1.まずme.hWndが.NETにはないので,上記のようにしましたが。。
hhttp://homepage1.nifty.com/MADIA/vb/vb_bbs2/200407_04070072.html
↑これを見る限りでは,第一引数はNothingのようです。

> 2.ZIPのパスはフルパスでよいんでしょうか?
これは,ごめんなさい。解らないです。

>  結果この先の文でZIP(API本体)を呼び出す部分でおちました。。。
> いけると思ったんですが。。。。

可能であれば,.basファイルをVS.NETのアップグレードウィザード
なんかで変換してみて,どうなるか試してみてはいかがでしょうか。

[ツリー表示へ]
タイトルRe^6: VB.netによる圧縮、解凍について
記事No2040
投稿日: 2005/08/26(Fri) 18:10
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
> 可能であれば,.basファイルをVS.NETのアップグレードウィザード
> なんかで変換してみて,どうなるか試してみてはいかがでしょうか。
その手がありましたね。一度やってみます!!
またご報告します!!
ありがとうございました!!

[ツリー表示へ]
タイトルRe^7: VB.netによる圧縮、解凍について
記事No2043
投稿日: 2005/08/29(Mon) 16:41
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
失礼します。
先日教えて頂いた方法で、圧縮、解凍はできたのですが、何故か解凍した
フォルダの中にそのアプリのEXEとPDBファイルが一緒に入り込んでしまいます。
何故でしょうか??ご教授願います。

[ツリー表示へ]
タイトルRe^8: VB.netによる圧縮
記事No2045
投稿日: 2005/08/30(Tue) 10:50
投稿者なおこ(・∀・)
お世話になります。

> フォルダの中にそのアプリのEXEとPDBファイルが一緒に入り込んでしまいます。
> 何故でしょうか??ご教授願います。
不思議な現象ですね(^_^;)

ソースを見ないと,私もさっぱり解りませんので,
ソースを貼り付けていただけますか?

#追記
差し支えない程度で結構でございます。

[ツリー表示へ]
タイトルRe^9: VB.netによる圧縮
記事No2051
投稿日: 2005/08/31(Wed) 10:26
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
またお世話になります。
ソース貼り付けます。↓
VB.NET(VS2003-windows2000)
Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        Dim f2 As New Example
        f2.ShowDialog(Me)
        'D&Dされたのがフォルダかファイルかを調べるメソッド
        For Each FileName As String In CType(e.Data.GetData(DataFormats.FileDrop, True),
String())
            If (GetAttr(FileName) And FileAttribute.Directory) = FileAttribute.Directory Then
                Call CompDir(Me.Handle.ToInt32, FileName, "C:\7zip.7z")
            ElseIf SevenZipCheckArchive(FileName, 1) = 0 Then
                Call CompFile(FileName)
            End If
        Next
    End Sub
    Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter
        If e.Data.GetDataPresent(DataFormats.FileDrop, True) Then
            '「ファイル」のドロップを許可
            e.Effect = DragDropEffects.Copy
        Else
            '「ファイル以外」のドロップを禁止
            e.Effect = DragDropEffects.None
        End If
    End Sub
    'ディレクトリ処理
    Public Function CompDir(ByVal hWnd As Long, ByVal strTargetDir As String, ByVal
strTargetZip As String) As Long

        Dim strCommand As String
        Dim strOut As String
        Dim nSize As Long
        Dim sevenZipOpt As String
        strOut = Space(512)
        nSize = 512

        If Dir(strTargetDir, FileAttribute.Normal) <> "" Then
            '上書き確認処理
            MsgBox(strTargetDir & "すでに存在しています。" & vbCrLf & &
quot;ファイルを上書きします
か?" & vbCrLf & "(はいで上書き,いいえで圧縮中止)", MsgBoxStyle.YesNo
+
MsgBoxStyle.Information, "上書き確認")
        End If

        sevenZipOpt = "-t7z -m0=LZMA "
        strCommand = "a -r " & sevenZipOpt & Chr(34) & strTargetZip &am
p; Chr(34) & " " & Chr(34)
& strTargetDir & "\" & Chr(34) & " *.*"

        CompDir = SevenZip(hWnd, strCommand, strOut, nSize)

        If CompDir <> 0 Then
            '失敗メッセージ
            MsgBox("圧縮に失敗しました。")
        Else
            MsgBox("圧縮成功しました。")
        End If
    End Function
一部抜粋するとこんな感じです。今は新しく作り直しましたが、未だに現象が続きます。
よろしく願います。

[ツリー表示へ]
タイトルRe:圧縮・解凍
記事No2053
投稿日: 2005/08/31(Wed) 14:18
投稿者なおこ(・∀・)
お世話になります。

折角ソースをUPしていただいたのですが,
引数の中身を変えたり,APIの宣言部分をいじってみたり.
Webでdllの名前などでGoogle検索したり,
色々調べて試してみたのですが,
私の無知のせいで,うまい事いきませんでした…orz
本当にごめんなさい。

フォームにドラッグ&ドロップで圧縮を行う
サンプル(vb6.0)を見つけました。
# また,他人頼りですが…orz
hhttp://members.jcom.home.ne.jp/fiztone/prog/vbarc/vbzip32.zip
(zip32.dllは必要,zip32j.dllは不要??)

agehaさんはAPIを用いてやりたい,との事でしたので,
蛇足ですが,J#のライブラリを用いた
サンプルを,どぼんさん以外のところでも発見しました。
hhttp://yaplog.jp/orator/monthly/200406/
こちらで試させて頂いたところ,
ファイル名に2バイト文字がある場合は,zipの中のファイルが壊れていましたが,
層でない場合はちゃんと圧縮されました。

お役に立てないどころか,余計に手間をかけさせてしまった様で,
申し訳ないです。本当にすみません…。

[ツリー表示へ]
タイトル解決!
記事No2056
投稿日: 2005/09/01(Thu) 18:35
投稿者ageha
[OSのVer]:Windows    [VBのVer]:VB.NET  
返事が遅くなりましたがなおこさんレスありがとうございます。
作り直しましたて動作するようになりました。
前のソースでコマンドラインの設定と圧縮オプションを行うと処理と7-zipに引数を渡す
処理を別々にする事で解決致しました。
いろいろご苦労お掛けしてすいません。ほんとありがとうございました!!
またご教授よろしくお願いします!!

[ツリー表示へ]
タイトルRe: 解決!
記事No2059
投稿日: 2005/09/02(Fri) 10:07
投稿者なおこ(・∀・)
お世話になります。

>解決致しました。
そうですか,それは本当に良かった〜…。

私は何もお役に立てませんでした。すみません。
こちらこそ,色々とご教授よろしくお願いします!

[ツリー表示へ]