C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: TAR32形式による圧縮処理について


(過去ログ 98 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■58562 / inTopicNo.1)  TAR32形式による圧縮処理について
  
□投稿者/ あずま (1回)-(2011/04/15(Fri) 13:16:55)

分類:[.NET 全般] 

VB2008+Windowsフォームでプログラムを作成しています
【Tar形式】による圧縮でお尋ねしたい事があります。

準備として
――――――――――――――――――――――――――――――――――――――――――――――――――
<DllImport("Tar32.dll", EntryPoint:="Tar", CharSet:=CharSet.Ansi, ExactSpelling:=True)> _
Shared Function Tar32(ByVal _hwnd As IntPtr, _
ByVal _szCmdLine As String, _
ByVal _szOutput As StringBuilder, _
  ByVal _dwSize As UInteger) As Integer
End Function

PG内で上記宣言をし『Tar32.dll』を使用しています
バージョン『2.36.0.1』になります
――――――――――――――――――――――――――――――――――――――――――――――――――

圧縮するにあたって
Cドライブ直下に「Temp」フォルダを作成し、
その中にアーカイブしたいファイルを置いておき
コマンド:"-cvf C:\Test.tar C:\Temp\*.*"
で『Test.tar』が生成されるのですが

このファイルを展開すると[Temp]フォルダも一緒に入ってしまいます
[Temp]フォルダをいれずにファイルだけまとめる事は可能でしょうか?


また、通常のアプリを動かす場合、
作業フォルダをCドライブ直下ではなく
アプリケーションの実行ファイル直下に[Temp]フォルダを作成しそこで処理する事が多いと思うのですが
デバック環境で同じ様に処理するとエラーになってしまいます。

「C:\Documents and Settings\User\My Documents\Visual Studio 2008\Projects\TestPG\TestPG\bin\Temp」
で圧縮コマンドを投げると戻り値『32781』が帰って来ます
これはパスが長すぎると駄目という事になるのでしょうか?









引用返信 編集キー/
■58570 / inTopicNo.2)  Re[1]: TAR32形式による圧縮処理について
□投稿者/ しるふぃん (14回)-(2011/04/15(Fri) 15:33:19)
No58562 (あずま さん) に返信

> コマンド:"-cvf C:\Test.tar C:\Temp\*.*"
tar32で圧縮する際のコマンドcは、ディレクトリ構成も含めアーカイブを新規に作成する形になってしまっています。

> アプリケーションの実行ファイル直下に[Temp]フォルダを作成しそこで処理する事が多いと思うのですが
> デバック環境で同じ様に処理するとエラーになってしまいます。
何のエラーが出ているのですか?

> 「C:\Documents and Settings\User\My Documents\Visual Studio 2008\Projects\TestPG\TestPG\bin\Temp」
> で圧縮コマンドを投げると戻り値『32781』が帰って来ます
> これはパスが長すぎると駄目という事になるのでしょうか?

一度コマンドを投げる前後のソースを載せてみてください。
引用返信 編集キー/
■58571 / inTopicNo.3)  Re[2]: TAR32形式による圧縮処理について
□投稿者/ あずま (3回)-(2011/04/15(Fri) 16:13:04)
しるふぃん さん
お返事ありがとうございます

> 何のエラーが出ているのですか?
エラーについては 戻り値『32781』のエラーになります

プログラムは以下のような感じです
===========================================================================
'出力先
Dim strOutputFile As String
strOutputFile = GetAppPath() & "\Temp\Test.tar"

'圧縮ファイル
Dim strMotoFile As String
strMotoFile = GetAppPath() & "\Temp\*.*"

'TARコマンド
Dim strCMD As String
strCMD = "-cvf" + Space(1) + strOutputFile + Space(1) + strMotoFile

'TAR形式による圧縮
Dim intRet As Integer
intRet = Tar32(Me.Handle, strCMD, Nothing, 0)

===========================================================================

'関数[GetAppPath]
Public Function GetAppPath() As String
Return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
End Function
===========================================================================

このロジックで関数GetAppPathを使用せずに
"C:\"を指定すると正常に動作しています
strCMD = "-cvf C:\Temp\Test.tar C:\Temp\*.*"
となると正常に動く

引用返信 編集キー/
■58572 / inTopicNo.4)  Re[3]: TAR32形式による圧縮処理について
□投稿者/ Hongliang (770回)-(2011/04/15(Fri) 16:20:06)
空白を含むパスはコマンドラインに渡す際二重引用符 (" ") で囲む必要があります。
余計なディレクトリが作られる件については、カレントディレクトリを変更するか -o オプションで基準ディレクトリを指定した上で、書庫に追加するファイルをそこからの相対パスで指定すればいいかな?

> エラーについては 戻り値『32781』のエラーになります
そのエラーコードの意味が分からないなら、せめて第三&第四引数にまっとうな値を入れて文字列で処理結果を受け取るべきではないでしょうか。
引用返信 編集キー/
■58574 / inTopicNo.5)  Re[4]: TAR32形式による圧縮処理について
□投稿者/ しるふぃん (15回)-(2011/04/15(Fri) 16:41:08)
Hongliang さんの言うとおり、まずは二重引用符で囲むのと、オプションの追加でいけるはずです。

それとエラーについてですが、tar32.dllを展開して中にある「Tar_cmd.txt」または「cmd_tare.txt」を参照して
コマンド形式をきちんと理解されたほうがいいですよ。

引用返信 編集キー/
■58576 / inTopicNo.6)  Re[5]: TAR32形式による圧縮処理について
□投稿者/ あずま (5回)-(2011/04/15(Fri) 16:53:16)
Hongliangさん。しるふぃんさん。

オプションの設定を再度見直してみます
ありがとうございました
引用返信 編集キー/
■58579 / inTopicNo.7)  Re[6]: TAR32形式による圧縮処理について
□投稿者/ あずま (6回)-(2011/04/15(Fri) 17:51:50)
システム内フォルダにでエラーになる件は
パスを""で括る事で解決しました

また、余計フォルダが入ってしまう問題も
[-o]オプションを使用して、基準のフォルダを指定し
中に入れるファイルを相対パスで指定することで解決いたしました。

[-o]オプションは色々調べても見つけ切れなかったので
教えていただいて大変助かりました。

Hongliangさん。しるふぃんさん。
ありがとうございました

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -