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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.1746 の関連記事表示

<< 0 >>
■1800  ご報告
□投稿者/ トラの尻尾しましま -(2005/11/02(Wed) 17:17:24)

    分類:[VB.NET] 

    まどか様

    ありがとうございました!!!
    無事、完成しました!!
    分割・結合・復元出来ました!!
    数日間大変お世話になりました。
    かなり、勉強させていただきました。
    すごく感謝しています。
    有難うございました。
記事No.1746 のレス / END /過去ログ2より / 関連記事表示
削除チェック/

■1788  Re[13]: ディスクエラーに関して
□投稿者/ まどか -(2005/11/01(Tue) 14:20:19)

    分類:[VB.NET] 

    まず、分割元ファイルをFileStreamで開いた際にLengthが取得できることは既知ですね。
    ここで15000という数字が決まってるわけですから、枚数と分割最終ファイルのバイト数がわかります。
    #4枚の場合、15000,15000,15000,余り
    ReadBytesメソッドは指定されたバイト数を現在のポインタから読み取ります。
    #オープン直後のポインタは先頭です。
    その結果、ポインタが実際に読み込んだ分位置がずれます。
    なので、オープンしてポインタとサイズを同期して読み込んでいく分にはReadBytesメソッドを連続で呼ぶだけです。
    #連続とは間にポインタをずらすようなメソッド等が無いこと

    任意の位置から読み取る場合は、FileStream.SeekとBinaryReader.Readを調べてください。

    > FileStream.ReadByte メソッド [Visual Basic]参照
    > で、良いのですよね、しかし、

    sがついてません。。。

    > その書き込みの指定がキチンとできていないから、

    書き込みではなく、読み込みがうまくいってません。
    前回の場合ですと、15000バイト目以降を読んでいないので
    最初の内容がすべてのフロッピーに書かれているわけです。
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1784  Re[12]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/11/01(Tue) 09:36:49)

    分類:[VB.NET] 

    ご教授・アドバイスありがうございます。
    早速、2枚以上のときの処理 loopでまわす。
    ファイルは壊れやすいので、ファイルのcloseを。
    1.番ですが、圧縮前に最適化しています、そのときに一時ファイルを使っていますので、
    気をつけて利用していきたいと思います。

    えっと、

    >Bは先頭から15000バイト読み込んだ結果ですよね。
    >ならば、残りとは15001バイト目以降です。
    >で、15001をどうやったら指定できるかですが、
    >ヘルプのReadBytesメソッドの最初に書いてある文章を見ればわかると思います。

    と、ありますが、


    FileStream.ReadByte メソッド [Visual Basic]参照
    ファイルからバイトを読み取り、読み取り位置を 1 バイト進めます。
    [Visual Basic]
    Overrides Public Function ReadByte() As Integer

    戻り値
    int にキャストしたバイト。またはストリームの末尾から読み取る場合は -1。


    で、良いのですよね、しかし、
    現在、
    B = fs.ReadBytes(区切りバイト数)
    としていますが、それの中の fsにあたる部分は B(先頭から15000バイト読み込んだ結果)
    ということになりますよね・・・。
    で、実際そのように記述すると、エラーが発生してしまいます。
    すみせん、頭がグチャグチャになってきました。
    折角、ご教授いただいているのに申し訳ないです。(泣)


    その書き込みの指定がキチンとできていないから、
    だから、結果的にFDに分割して保存したデータが
    途中までしか取れていないのですよね。
    なので、復元させようとしても
    『a.LZH ハフマンコードが壊れています』という結果に・・。

記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1782  Re[11]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/31(Mon) 12:08:38)

    分類:[VB.NET] 

    > これで、てっきり、読み込んでいるのだとおもってしまっていました・・・。
    > すみません、どこをどうなおしたら良いのかが分かりません。

    Bは先頭から15000バイト読み込んだ結果ですよね。
    ならば、残りとは15001バイト目以降です。
    で、15001をどうやったら指定できるかですが、
    ヘルプのReadBytesメソッドの最初に書いてある文章を見ればわかると思います。


    #主題とは関係ないのですが、思ってることを書きます。

    1.
    システムフォルダへ書き込んでいるということでしたが、システムフォルダの必要が無ければ
    一時フォルダなどを利用しいらなくなったら削除しましょう。
    ※一時フォルダの取得についてはTipsをご覧ください。

    2.
    ご提示のコードでは分割元ファイルがオープンしたままフロッピーへの保存処理がおこなわれます。
    まずローカルディスクに対して分割ファイルを作成してしまってからフロッピーへの保存をおこなったほうがよいでしょう。
    ※よほど分割元ファイルが巨大で入力待ちになるのならこの限りではありません。
    分割ファイルが出来上がれば、あとはそれを処理することに専念できます。

    3.
    今のままではフロッピーが1、2枚しか処理できません。
    2で分割されたファイルを作る際に枚数を求めることができれば
    フロッピーへの保存処理をループ処理として記述できます。
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1781  Re[10]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/31(Mon) 11:37:13)

    分類:[VB.NET] 

    No1780に返信(まどかさんの記事)
    >>その、ワークファイル.txtを、DB.LZHファイルにして、UNLHA32.DLLで解凍させようとしたのですが、
    >>『ファイルの一部が見つかりません』とでてしまいます。
    >
    > ワークファイルとは分割したファイルを結合して元に戻したファイルでよろしいですか?
    はい。
    FD1枚・2枚目を ワークファイルに保存して、それをLZH方式で保存します。
    名前は、INFile_DB.txtです。
    outFile.txtという名前のワークファイルは、分割したデータを一度outFile.txtに読み込んで、FDに保存という方法をとっています。


    > だとしたら、その部分がわからないことには。。。
    > メッセージ文に少々違和感がありますが、LZH形式が矛盾してることは間違いないでしょう。
    >
    > と、思ってましたが、
    >
    >> '15000ごとにデータを区切る
    >> B = fs.ReadBytes(15000)
    > >
    >> '2枚目のとき
    >> Dim nokori As Long = FileSize
    >> outFile.Write(B, 0, nokori)
    >
    > 2枚目のときにBを読み込んでいないのでしょうか?

    >> '2枚目のとき
    >> Dim nokori As Long = FileSize
    >> outFile.Write(B, 0, nokori)
    これで、てっきり、読み込んでいるのだとおもってしまっていました・・・。
    すみません、どこをどうなおしたら良いのかが分かりません。
    >> outFile.Write(B, 0, nokori)
    の部分の(B, 0, nokori)の 『0』が問題なのでしょうか・・。
    そのせいで、データが正しく取れていなくてエラーが発生するのでしょうか・・。


    >
    > えっと、やろうとしてることは、
    > 1.MDBファイルをLHA圧縮する−>Bファイル
    > 2.Bファイルを分割してフロッピーへ保存する
    > 3.フロッピーからデータを結合する
    > 4.結合したファイルをLHA解凍する
    > と思うのですが、

    そのとおりです。

    > ワークファイルの位置付けがわかりません。
    > #先の説明だと分割時に作成しているようですが。。。

    分割時のワークファイル・結合時のワークファイルの名前が混在してしまい、
    ややこしく、分かりにくい説明をしてしまってすみません。
    大変失礼しました。


    何度も何度も、お手数をお掛けしてしまい大変申し訳ないです.
    よろしくお願いいたします。

記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1780  Re[9]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/31(Mon) 11:08:31)

    分類:[VB.NET] 

    > その、ワークファイル.txtを、DB.LZHファイルにして、UNLHA32.DLLで解凍させようとしたのですが、
    > 『ファイルの一部が見つかりません』とでてしまいます。

    ワークファイルとは分割したファイルを結合して元に戻したファイルでよろしいですか?
    だとしたら、その部分がわからないことには。。。
    メッセージ文に少々違和感がありますが、LZH形式が矛盾してることは間違いないでしょう。

    と、思ってましたが、

    > '15000ごとにデータを区切る
    > B = fs.ReadBytes(15000)
    >
    > '2枚目のとき
    > Dim nokori As Long = FileSize
    > outFile.Write(B, 0, nokori)

    2枚目のときにBを読み込んでいないのでしょうか?

    えっと、やろうとしてることは、
    1.MDBファイルをLHA圧縮する−>Bファイル
    2.Bファイルを分割してフロッピーへ保存する
    3.フロッピーからデータを結合する
    4.結合したファイルをLHA解凍する
    と思うのですが、
    ワークファイルの位置付けがわかりません。
    #先の説明だと分割時に作成しているようですが。。。

記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1779  Re[8]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/31(Mon) 09:47:34)

    分類:[VB.NET] 

    土日、パソコンを触っていませんでしたので、
    お返事が大変遅くなりまして、もうしわけございません。

    丁寧なご説明ありがとうございます。
    新しいファイルでも、開く・読み込み・書き込み・閉じる
    の作業は必要ですよね。

    それでなのですが、
    エラー無く、1枚目・2枚目のデータをワークファイルに書き込めました。

    ところが、いざ、
    その、ワークファイル.txtを、DB.LZHファイルにして、UNLHA32.DLLで解凍させようとしたのですが、
    『ファイルの一部が見つかりません』とでてしまいます。

    さらに、Lhaca で強制的に解凍・展開させようとすると、元DB(アクセスのmdbファイル)
    きちんと、拡張子はmdbファイルなのですが、
    『認識できません』とでてしまいます。
    何故なのでしょうか・・・
    分割させたときに、そのデータをきちんと取ってこれていないということでしょうか・・・。
    ちなみに、下記が分割させたものを各フロッピーに保存させるロジックです。



    Dim fs As New BinaryReader(New FileStream("データ元パス・・・DB.LZH", FileMode.Open))
    '15000ごとにデータを区切る
    B = fs.ReadBytes(15000)
    fs.Close()
    outFile.Write(B, 0, B.Length)
    outFile.Close()
    'データベースのコピー 'tempのファイルをワークファイルとして読み込み最後に移動する方法
    A_Fname = Drive & "DISK" & Format(count, "000") & "-" & DAY
    File.Copy(outfileName, A_Fname & ".txt", False)
    FileSize = FileSize - B.Length

    count = count + 1
    MsgBox("" & count & "枚目のフロッピーディスクをセットして下さい", MsIcon, Caption)
    Else
    '2枚目のとき
    Dim nokori As Long = FileSize
    outFile.Write(B, 0, nokori)
    outFile.Close()
    A_Fname = Drive & "DISK" & Format(count, "000") & "-" & DAY
    'ファイル最後にENDをつける
    File.Copy(outfileName, A_Fname & "END.txt")
    FileSize = FileSize - nokori
    End If

    よろしくお願いします。
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1772  Re[7]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/28(Fri) 16:55:39)

    分類:[VB.NET] 

    > もしかして、圧縮して保存したファイルをStreamReaderで最後まで読み込んで
    > その読み込んだ内容をなにか変数に保存しておいてそれを新しく作ったファイルに書き込むという作業が必要なのでしょうか・・・。

    #ワークファイルって今から作るファイルですよね?
    #今からというのはプログラムの中でという意味です。

    えっと、ワークファイルも単に出力しようとしているファイルのひとつですよね。
    ですのでワークファイルへも出力という意味では同じことをする必要があります。
    「ファイルへ出力する」に対して「オープン、出力、クローズ」があり
    ファイルが違えばその分だけそれを用意する必要がありますよね。

記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1769  Re[6]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/28(Fri) 15:40:29)

    分類:[VB.NET] 

    ディスクエラーに関してとても分かりやすい説明ありがとうございます。
    理解できました・・・。
    有難うございます.





    コードですが、正しくは、

    1枚目のディスクの場合
    'ファイル作成
    A_FCreate = File.Create(ワークファイル.txt")
    'ファイル書き込み
    Dim writer As StreamWriter = New StreamWriter(分割したバイナリファイルをテキスト形式で読み込んだファイル001., False, System.Text.Encoding.Default)
    writer.Write(txtA_Cname)
    writer.Close()
    writer = Nothing

    2枚目ディスクの場合

    'ファイル書き込み
    Dim writer As StreamWriter = New StreamWriter(分割したバイナリファイルをテキスト形式で読み込んだファイル002.txt, False, System.Text.Encoding.Default)
    writer.Write(A_Cname)
    writer.Close()
    writer = Nothing


    になりますかね・・・


    あの・・・すみません・・・
    もしかして、圧縮して保存したファイルをStreamReaderで最後まで読み込んで
    その読み込んだ内容をなにか変数に保存しておいてそれを新しく作ったファイルに書き込むという作業が必要なのでしょうか・・・。
    話がどんどん違う方向に行ってしまっていたらすみません。
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1768  Re[5]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/28(Fri) 13:26:38)

    分類:[VB.NET] 

    > おっしゃるとおり、> MoveをCopyに変更しますと、上手くいきました。

    これは原因ではありません。
    フロッピーや「リムーバブル」と表示されるデバイスは物理的に遅いので
    遅延書き込みという処理方式がおこなわれます。
    それは物理的に書き込まずにハードウェアのキャッシュメモリなどに対しておこなわれます。
    この処理が完了した時点で、例えばコピー中のダイアログが消えますが、
    物理的なIOはまだ完了していません。
    その未完了の状態でディスクを取り外すと。。。
    今回の場合はその状態で次のフロッピーを入れたため、
    裏でまだ続いている処理が「フロッピーが違う」と言っています。
    Copyの場合、元ファイルは参照しかしないためMoveのコピー+削除に比べて
    処理時間が若干短くなるので同じタイミングでもエラーにならなかったわけです。

    > データをバイナリファイルで読み込んで、分割し、
    > それらをテキスト形式で保存し、それを、作成した別のワークファイルで(テキスト形式)
    > に書き込んでいく場合は、
    > StreamWriter・BinaryWriter どちらで書き込んでいけばよいのでしょうか?

    テキスト形式とはキャラクタ+改行コードのことを言うのですが、その意味でおっしゃっていますか?
    基本的にはTextWriterとBinaryWriterを使い分けすればよいでしょう。

    > 上記のような記述にした場合、データが全くワークファイルに書き込まれていなかったので・・・。

    見る限り、書き込んでいませんよね。(汗
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1766  Re[4]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/28(Fri) 12:10:55)

    分類:[VB.NET] 

    >
    > エラー時の元と先のファイル名が変な形になってませんか?
    >
    > エラーの内容から言えることは
    > ドライブ内でクローズされる前にフロッピーを入れ替えたときの症状です。
    >
    > MoveをCopyに変えるとどうなるでしょうか?

    原因がわかりました・・。
    おっしゃるとおり、> MoveをCopyに変更しますと、上手くいきました。
    お騒がせしました。

    一つ、馬鹿な質問をさせてください。
    データをバイナリファイルで読み込んで、分割し、
    それらをテキスト形式で保存し、それを、作成した別のワークファイルで(テキスト形式)
    に書き込んでいく場合は、
    StreamWriter・BinaryWriter どちらで書き込んでいけばよいのでしょうか?

    1枚目のディスクの場合
    'ファイル作成
    A_FCreate = File.Create(ワークファイル.txt")
    'ファイル書き込み
    Dim writer As StreamWriter = New StreamWriter(A_Cname, False, System.Text.Encoding.Default)
    writer.Write(分割したバイナリファイルをテキスト形式で読み込んだファイル001.txt)
    writer.Close()
    writer = Nothing

    2枚目ディスクの場合

    'ファイル書き込み
    Dim writer As StreamWriter = New StreamWriter(A_Cname, False, System.Text.Encoding.Default)
    writer.Write(分割したバイナリファイルをテキスト形式で読み込んだファイル002.txt)
    writer.Close()
    writer = Nothing



    後で、そのワークファイル.txt(二つのデータを合わせたもの)を  DAta.LZHにします。

    上記のような記述にした場合、データが全くワークファイルに書き込まれていなかったので・・・。
    すみません、よろしくお願いします.
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1760  Re[3]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/27(Thu) 18:57:31)

    分類:[VB.NET] 

    > MsgBox("" & count & "枚目のフロッピーディスクをセットして下さい")

    これは誰が表示してるのでしょうか?
    OSですか?アプリですか?

    エラー時の元と先のファイル名が変な形になってませんか?

    エラーの内容から言えることは
    ドライブ内でクローズされる前にフロッピーを入れ替えたときの症状です。

    MoveをCopyに変えるとどうなるでしょうか?
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1758  Re[2]: ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/27(Thu) 18:24:16)

    分類:[VB.NET] 


    > ドライブのランプが完全に消灯しないで2枚目に入れ替えてないか確認してみましょう。

    MsgBox("" & count & "枚目のフロッピーディスクをセットして下さい")
    と表示され、完全にランプが消えていることを確認し、
    ディスクをセットし、okボタンをクリックしました。
    そのとき、ランプが点灯し、残りの容量を書き込んでいます。
    そのときに発生エラーが発生します。

    もしかして分割できていないのでしょうか・・・。
記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1754  Re[1]: ディスクエラーに関して
□投稿者/ まどか -(2005/10/27(Thu) 18:11:28)

    分類:[VB.NET] 

    > の File.Move(outfileName, A_Fname & "END.txt") の部分でエラーが発生します。
    > ※1枚目のデータはエラー発生せずに保存できました。
    >
    > 追加情報 : 間違ったフロッピー ディスクがドライブに挿入されています。
    > %2 (ボリューム シリアル番号: %3) を
    > ドライブ %1 に挿入してください。
    > というエラーが発生してしまいます。

    ドライブのランプが完全に消灯しないで2枚目に入れ替えてないか確認してみましょう。
    #そうなら、最悪データが読み取りできなくなりますので注意が必要です。

記事No.1746 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■1746  ディスクエラーに関して
□投稿者/ トラの尻尾しましま -(2005/10/27(Thu) 17:29:41)

    分類:[VB.NET] 


    分類:[VB.NET] 

    2005/10/27(Thu) 17:58:42 編集(投稿者)
    2005/10/27(Thu) 17:30:43 編集(投稿者)

    すみません、前回の
    質問の続きにになり本当にすみません!!

    http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=1712&rev=&no=0
    昨日実行処理を実行したときは、問題なく2枚目(END付)のディスクも保存できたのですが、
    本日確認のため、実行すると

    Dim nokori As Long = FileSize
    outFile.Write(B, 0, nokori)
    outFile.Close()

    'ファイル最後にENDをつける
    File.Move(outfileName, A_Fname & "END.txt")

    A_Fname ・・・現在A:\を保存先に設定しています。

    の File.Move(outfileName, A_Fname & "END.txt") の部分でエラーが発生します。
    ※1枚目のデータはエラー発生せずに保存できました。

    'System.IO.IOException' のハンドルされていない例外が mscorlib.dll で発生しました。

    追加情報 : 間違ったフロッピー ディスクがドライブに挿入されています。
    %2 (ボリューム シリアル番号: %3) を
    ドライブ %1 に挿入してください。
    というエラーが発生してしまいます。

    それで、試しに、
    'ファイル最後にENDをつける
    File.Move(outfileName, A_Fname & "END.txt")
    のA_Fname部分を 『c:\test』に変更して保存処理を行うと、エラーも発生せず、問題なく
    保存することができました。

    どなたか、ご教授願います。

    すみません。
親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■1746  Re[4]: ToolTipウィンドウの表示位置変更方法について
□投稿者/ M.K -(2007/03/05(Mon) 15:25:13)
    No1736 (Hirotow さん) に返信
    
    > 対処療法的ですが、
    > いったんHide()すればShow()しても大丈夫だと思います。
    
    Hirotowさん、返信ありがとうございます。
    
    いったんHide()してShow()と言うのは以下のようなコーディングを指すので
    しょうか?
    
    private void toolTip1_Popup(object sender, PopupEventArgs e)
    {
       toolTip1.Hide(button1);
       toolTip1.Show("あいうえお", button1, 0, 0);  // ← 0,0は例です。
    }
    
    この方法ですとツールチップが表示→消滅→表示→消滅と点滅が繰り返され
    てしまうのですが、Hide()メソッドを記述するイベントや位置が違うのでしょうか?
    
    
    これはあくまで私見なのですが、Popupイベントは"表示前"に発生する様なので
    その中でShow()メソッドを実行すると、それに反応して別のPopupイベントが
    発生してしまい、無限ループっぽくなってOverflowが発生するものと考えます。
    
    更にPopupイベント内でHide()メソッドを実行した場合、初回のイベントでは
    非表示の対象となるツールチップが表示されておらず、再帰的に発生する2回目
    以降のイベントで、前回のイベント時に表示されたツールチップを非表示としま
    すが、すぐさま次のShow()メソッドが実行されるため、結果的にツールチップが
    点滅している物と思われます。
    
    
    自分でももう少し調査してみますが、他の方法をご存知の方がいらっしゃいまし
    たら、引き続き宜しくお願いします。
    
記事No.1692 のレス /過去ログ10より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -