DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomalシステム時計の設定(3) | NomalSeleniumで開いているページのTableを編集したい(5) | Nomalソケット通信入門 ひらがな(4) | NomalVisual Basicでエラーが出る(3) | Nomalインストーラにて、ローミングフォルダにファイルを配置したい(0) | NomalRGB値の所得(2) | Nomal時間変数(文字列)の扱い(4) | NomalVB.net からAccessDBへの接続(2) | Nomal画像のスクロール(6) | Nomalタイマーの一括処理(6) | NomalTreeViewとDataGridViewのスクロールを同期(シンクロ)させたい(4) | NomalTreeViewの現在位置とDataGridViewの現在位置を合わせたい(7) | NomalPictureBoxの画像を連続保存(11) | NomalDataGridViewの特定セルにボタンを配置する方法(5) | Nomalフォームのリサイズ時にDataGridViewが再描画されない(4) | NomalテキストボックスのValidatingイベントよりも先に発生するボタン発生イベントは何でしょう?(2) | NomalPDFをフォーム上で表示させる方法につきまして(4) | NomalDataGridViewの行ヘッダーに行番号を表示した時のエラー(4) | Nomal継承元フォームで各フォームのボタン動作を検知したい(3) | Nomalラジオボタンの一括設定(7) | NomalWindowsエクスプローラからのドラッグ&ドロップ(2) | NomalRichTextBoxのテキストをpictureBOXへ(12) | Nomalクリックイベントでexeを作成できるか(2) | Nomal作成した白黒画像をWordに貼り付けてから「図として保存」(8) | Nomalアセンブリ情報が載らない(1) | Nomal先頭に空白(スペース)があるファイルを読み込んでRichTextBoxへ書き出すとスペースが削除える(6) | Nomalc#で日付型の定義の仕方で質問があります。(2) | NomalExcel Com オブジェクトの増殖(13) | Nomal二次元マップから値の取得(1) | NomalアプリでHDMIへ出す解像度を変えたい(4) | Nomal列車の時間ごとの位置情報を表示したいです。(2) | Nomal画像の中心を基点に回転(4) | NomalDataGridViewのドロップダウンリストの表示と選択後の値を分けたい(1) | NomalVB.NetでVB6.0と同じFontを指定しても同様に印刷されない(9) | NomalタッチキーボードでIMEを自動で切替えたい(6) | NomalVSTOによるエクセルアドインのインストーラーでのアップデート(1) | NomalMP4動画を再生する方法について(5) | NomalUrlにアクセスするとダウンロードされるファイルを捕まえる(2) | NomalLableのカラー色を文字変数から変更したい(5) | NomalLabelで文字単位の背景色(7) | NomalTEXTBOXのプロパティを文字列に(7) | Nomalタブレット等でスワイプによるスクロールを実装(2) | NomalPDFをフォーム上で表示させる方法につきまして(6) | NomalChart X軸上の描画を切り替えたい(0) | NomalRichTextBoxへのドラッグ&ドロップしたExcelファイルの扱い(3) | Nomal特定のPCだけ発生する「パディングは無効なので削除できません」のエラーの原因(6) | NomalASP.NET WebApi内でXmlReader.Create(url)がタイムアウトする(4) | NomalDatagridViewでファンクションキーを止めたい(5) | Nomal表示動作が重くなる(3) | Nomalbitmapを複数スレッドで処理したい(2) | NomalLoadOptionのパラメータの意味(3) | Nomalフォーム背景のみを半透明にしたい(5) | Nomal読み出し元フォームの位置取得方法(2) | Nomalコンストラクターに続く{}の意味(2) | Nomal1行で書くことできますか?(3) | NomalCommandBuilderによって作られるCommandTextの内容(5) | Nomalvb.netで7zの圧縮・解凍をしたい。(2) | NomalC# NASでのプログレスバー有りのコピー(0) | Nomal正規表現で文字の繰り返しパターン(4) | NomalDataViewのFindRowsde(7) | NomalNPOIでのエクセル編集で期待通りに書き込めません(2) | NomalDataGridのSetDataBindingに代わるもの?(3) | NomalFormのサイズ変更で掴める辺を制限したい(2) | NomalVSTOとWebView2の共存って可能?(3) | Nomalビデオ圧縮のコーデック(2) | NomalWindowsMediaPlayerで次のURLを指定しても反映されない。(3) | Nomal"−"を縦書きにしたい(9) | Nomal.NET6.0 のWinFormにWPFのユーザーコントロールを配置したい(4) | NomalDataGridViewの列にコンボボックスを表示する(2) | Nomalデータグリッドビューの特定の列ヘッダの色(2) | NomalVB-Report10→11への移行(4) | Nomal入力値を元に描画させたい(2) | Nomalデフォルトプリンタの用紙向き変更(0) | NomalpictureBoxとlabelの重ね合わせ(2) | NomalASP.net デバッグ時の .js ファイルの変更が反映されない(1) | NomalVBで開いたExcelでのイベントを取得するには(4) | NomalWindowsエクスプローラへのドロップ先フォルダの取得(4) | NomalデザイナでSystemColorsのような色一覧から選択できるようにしたい(0) | NomalVisualStudio2019 以降の検索ダイアログが正常に動作しない(2) | NomalTaskの入れ子の待ち方2(4) | NomalTaskの入れ子の待ち方(5) | NomalUsingの使い方が間違っている?(4) | Nomal//./の意味は?(2) | Nomalバイナリーファイルの結合と分解(2) | Nomal表の最後の行の下にDropできない(1) | NomalCookieの勉強を始めました。(2) | Nomal複数のPageに分かれる場合のスクレ―ピング(6) | NomalDataGridViewのセル結合部分にボタンを表示する方法(2) | NomalTask.Runの使い方(4) | Nomalランダムファイルを高速化させたい(5) | NomalPictureBox のサイズを設定する(2) | NomalProcessクラスMainModuleプロパティでアクセス拒否(3) | NomalLINQでControlsをEnable=Falseに設定(3) | Nomalプロセス間の通信(相互)(2) | NomalC#をVBに変換する方法が分かりません(1) | NomalPictureBoxに動的に画像を表示する(1) | NomalYahooのHPで、検索文字の入力ができない(3) | NomalWebView2のEncodeの問題?(5) | NomalWinFormでChromeをSeleriumで操作しているが、Closeの仕方(2) |



■記事リスト / ▼下のスレッド
■34990 / 親記事)  Taskの入れ子の待ち方
□投稿者/ Wan 付き人(51回)-(2022/01/06(Thu) 10:34:44)
  • アイコン環境/言語:[VisualBasic2019 Windows10 Basic Framework4.7.2] 
    分類:[.NET] 

    下記のコードは、ボタン5を押すと子タスクと孫タスクが起動して、子タスクが、孫Taskのj>7のFalseを待って、終了する積りで書いたものです。
    Dim tokenSource As New CancellationTokenSource
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    tokenSource.Cancel()
    End Sub
    Private Async Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    tokenSource = New CancellationTokenSource
        Dim token As CancellationToken = tokenSource.Token
        Debug.Print($"StartTask ID:{CurrentId} スレッド:{CurrentThread.ManagedThreadId}")
        Try
          Await Task.Run(
              Async Sub()
                  Dim i As Integer = 0
                    Debug.Print($"子Task ID:{CurrentId} スレッド:{CurrentThread.ManagedThreadId}")
                    Dim 孫Task As Task = Task.Run(
                      Sub()
                          Dim j As Integer = 0
                            Debug.Print($"孫子Task ID:{CurrentId} スレッド:{CurrentThread.ManagedThreadId}")
                            While j < 7
                              If token.IsCancellationRequested Then
                                  Debug.Print("孫Taskは、停止しました。")
                                  Exit While
                                End If
                                Thread.Sleep(500) '0.5秒待つ
                                Debug.Print($"孫TaskCount:{j}")
                                j += 1
                            End While
                        End Sub)
                    While i < 5
                      If token.IsCancellationRequested Then
                          Debug.Print("子Taskは、停止しました。")
                            Exit While
                        End If
                        Thread.Sleep(500) '0.5秒待つ
                        Debug.Print($"子TaskCount:{i}")
                        i += 1
                    End While
                    Await 孫Task
                End Sub)
        Finally
          tokenSource.Dispose()
        End Try
        Debug.Print($"FinishTask ID:{CurrentId} スレッド:{CurrentThread.ManagedThreadId}")
    End Sub
    ところが、動かしてみると、どうも子タスクは、孫タスクの終了を待ってくれないようです。Awaitで待機しているにもかかわらず。
    なぜでしょうか?
    StartTask ID: スレッド:1
    子Task ID:1 スレッド:3
    孫子Task ID:3 スレッド:4
    孫TaskCount:0
    子TaskCount:0
      (省略)
    孫TaskCount:4
    子TaskCount:4
    FinishTask ID: スレッド:1
    孫TaskCount:5
    孫TaskCount:6
    一方、ボタン2を押すと見かけ上は、なんとなく動いているようにも見えるような結果が得られましたが、根本的な問題解決になっていないことは理解しています。また、Task.Runでtokenを渡していませんが、現時点では、意図的なものです。
    StartTask ID: スレッド:1
    子Task ID:1 スレッド:3
    孫子Task ID:3 スレッド:4
    子TaskCount:0
    孫TaskCount:0
    孫TaskCount:1
    子TaskCount:1
    子TaskCount:2
    子Taskは、停止しました。
    孫TaskCount:2
    孫Taskは、停止しました。
    FinishTask ID: スレッド:1
    子タスクが、孫タスクを待つようにするには、どのようにすれば良いのでしょうか?
    詳しい方いらっしゃいましたら、御指南頂けないでしょうか?宜しくお願い致します。
    

違反を報告
引用返信

▽[全レス5件(ResNo.1-5 表示)]
■34991 / ResNo.1)  Re[1]: Taskの入れ子の待ち方
□投稿者/ Hongliang 大御所(616回)-(2022/01/06(Thu) 11:29:38)
  • アイコン
    Visual Studio 2019をご使用とのことですが、そうであるなら、
    Await Task.Run(
        Async Sub()
    のAsync Sub()のところに警告を示す波線が引かれていると思います。
    そこにマウスオーバーすれば警告内容がツールチップで表示されます。
    また[エラー一覧]ウィンドウにも同じ内容の警告が出ていると思います。

違反を報告
引用返信
■34992 / ResNo.2)  Re[2]: Taskの入れ子の待ち方
□投稿者/ Wan 付き人(52回)-(2022/01/06(Thu) 14:59:49)
  • アイコンHongliangさんいつもお世話になっております。
    ご指摘通り、Async Function() As Taskに変更しただけで、問題なく動きました。

    でも、どこで、Task(多分?孫Task?)がReturnされるのでしょうか?
    なぜ?Functionなのでしょうか?
    お手を煩わせてすみません。

違反を報告
引用返信
■34993 / ResNo.3)  Re[3]: Taskの入れ子の待ち方
□投稿者/ Hongliang 大御所(617回)-(2022/01/06(Thu) 15:48:17)
  • アイコン
    > でも、どこで、Task(多分?孫Task?)がReturnされるのでしょうか?
    
    Awaitを含むFunctionは、コンパイラが暗黙にTaskを返却するようなコードにコンパイルします。
    Async Function Hoge() As Task
        Debug.WriteLine("enter") ' 一度Awaitするまでは同期的に実行される
        Await Task.Delay(1000) ' Task.Delayおよびそれ以降の処理がTaskとして返値になる
        Debug.WriteLine("exit")
    End Function
    
    > なぜ?Functionなのでしょうか?
    
    Subは返値なし、Functionは返値ありです。
    Sub Hoge() As Taskとは書けません。
    Taskを返したいならFunctionでなければなりません。
    Async Subと書くケースはほぼイベントハンドラのみになるはずで、
    ほとんどの場合Async Functionになります。

違反を報告
引用返信
■34994 / ResNo.4)  Re[4]: Taskの入れ子の待ち方
□投稿者/ Wan 付き人(53回)-(2022/01/06(Thu) 16:18:42)
  • アイコンHongliangさん
    お返事有難うございます。

    Awaitは、メソッド内の実行位置に関わらず、そのメソッドが終了する時に、コンパイラが忖度して呼び出し元にTaskを返すということでしょうか?

    だから、Functionで受け取らないとダメってことですね?

    有難う御座いました。
    また、よろしくお願いします。

違反を報告
引用返信
■34995 / ResNo.5)  Re[5]: Taskの入れ子の待ち方
□投稿者/ Wan 付き人(54回)-(2022/01/06(Thu) 16:19:15)
  • アイコン解決済みです。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-5]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34983 / 親記事)  Usingの使い方が間違っている?
□投稿者/ かけ出しVB 一般人(2回)-(2021/12/21(Tue) 10:41:45)
  • アイコン環境/言語:[VisualBasic Windows10 ] 
    分類:[.NET] 

    名前付きパイプについての質問の続きです。
    次のコードは、名前付きパイプのServer側からClient側にMessegeを送って、Client側から送り返されるMessegeを出力するものです。
    (Client側のコードは省略)
    このコードで、問題なく動作するのですが、一回目の名前付きパイプをMethod化するとIOExceptionエラー(多分?サーバーインスタンスの最大数を超えた)が発生します。
    一回目のNamedPipeServerStreamが閉じていないので、インスタンス数が1では足りないということだと考え、インスタンス数を2にして実行すると、
    UnauthorizedAccessExceptionエラー(パスへのアクセスが拒否されました)が発生します。メソッド化すると、うまく動かなく理由を教えて頂けないでしょうか?
    宜しくお願い致します。
    
    Private Async Sub FormServer_Load(sender As Object, e As EventArgs) 
                                                           Handles Me.Load
      ※一回目の名前付きパイプ をMethod化して呼び出すとエラーになる
      Using pipeServer = New NamedPipeServerStream("PipeServer", 
                                               PipeDirection.Out, 1)
          Await pipeServer.WaitForConnectionAsync()
            Using writer = New StreamWriter(pipeServer)
              Dim message = $"PipeClient{1}"
                Await writer.WriteLineAsync(message)
            End Using
        End Using
        ※二回目の名前付きパイプ
        Using pipeServer = New NamedPipeServerStream("PipeServer",
                                              PipeDirection.In, 1)
          Await pipeServer.WaitForConnectionAsync()
            Using reader = New StreamReader(pipeServer)
              Dim message = Await reader.ReadLineAsync()
                Debug.Print($"受信メッセージ : {message}  
                                          Client→Server{vbLf}")
            End Using
        End Using
    End Sub
    
    Async Sub MyMethod()
    Using pipeServer = New NamedPipeServerStream("PipeServer", 
                                          PipeDirection.Out, 1)
          Await pipeServer.WaitForConnectionAsync()
            Using writer = New StreamWriter(pipeServer)
            Dim message = $"PipeClient{1}"
                Await writer.WriteLineAsync(message)
            End Using
        End Using
    End Sub
    

違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34984 / ResNo.1)  Re[1]: Usingの使い方が間違っている?
□投稿者/ Hongliang 大御所(614回)-(2021/12/21(Tue) 11:08:02)
  • アイコン2021/12/21(Tue) 11:21:14 編集(投稿者)

    MyMethodは完了しないうちに制御を返してくるので、1つ目のPipeServerがオープンされたまま2つ目のPipeServerをオープンしようとします。
    そのときPipeDirectionが既存のものと違うものが指定されたため、アクセス拒否になります。
    (つまり、PipeDirectionは同時に開いている同名のNamedPipeServerStreamすべてで同じである必要があります)

    まずOutで出力し、改めて新しいInの名前付きパイプで入力を受けたい場合、MyMethodが最後まで実行されてからInで作成する必要があります。
    そうするためには、MyMethodを
    Async Function MyMethod() As Task
    としてTaskを返値に持たせ、呼び出し側で
    Await MyMethod()
    Using pipeServer = New NamedPipeServerStream("PipeServer", ...
    とMyMethodをAwaitするようにします。

    > 名前付きパイプのServer側からClient側にMessegeを送って、Client側から送り返されるMessegeを出力するものです。
    NamedPipeServerStreamをInとOutそれぞれ作って2回接続するのではなくて、InOutで1つ作って、1回接続してWrite/Readしたほうが簡単じゃないでしょうか…。
違反を報告
引用返信
■34985 / ResNo.2)  Re[2]: Usingの使い方が間違っている?
□投稿者/ かけ出しVB 一般人(3回)-(2021/12/21(Tue) 13:32:01)
  • アイコンお返事ありがとうございます。
    MyMethodは完了しないうちに制御を返してくるので、・・・
    について、深堀り勉強してみます。
    どのようにすれば良いかは、分かりました。
    InOutでやろうとして、単純に真ん中の

    End Using
    ※二回目の名前付きパイプ
    Using pipeServer = New NamedPipeServerStream("PipeServer",
    PipeDirection.In, 1)
    を削除したのですが、
    Await pipeServer.WaitForConnectionAsync()の部分で、
    「閉じているパイプにアクセスできません」と出てしまうので、
    やむを得ず、この形で行こうと思いました。
    Using writer = New StreamWriter(pipeServer)
     〜
    End Using
    で、パイプも閉じてしまうのでしょうか?
違反を報告
引用返信
■34986 / ResNo.3)  Re[3]: Usingの使い方が間違っている?
□投稿者/ Hongliang 大御所(615回)-(2021/12/21(Tue) 13:47:58)
  • アイコン> Using writer = New StreamWriter(pipeServer)
    >  〜
    > End Using
    > で、パイプも閉じてしまうのでしょうか?

    はい。
    https://docs.microsoft.com/ja-jp/dotnet/api/system.io.streamwriter.-ctor?view=net-6.0#System_IO_StreamWriter__ctor_System_String_System_Boolean_
    そうさせないためには、StreamWriterコンストラクタの第4引数を指定する必要があります。
    あるいは、StreamWriterをUsingしないという選択肢もあります。その場合、書き込んだ後はFlush()だけして、Dispose()やClose()はしないでおきます。
違反を報告
引用返信
■34987 / ResNo.4)  Re[4]: Usingの使い方が間違っている?
□投稿者/ かけ出しVB 一般人(4回)-(2021/12/21(Tue) 14:48:24)
  • アイコン全ての謎が解けた・・って感じです。
    感謝の限りです。
    教えて頂いたページは、何度も何度も読んだつもりですが、肝心なところを読み解いていない、いわゆる猫に小判ってやつですね?
    恥ずかしいです。
    今後は、着目点を変えて、勉強をしようと思いました。
    ありがとうございました。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34979 / 親記事)  //./の意味は?
□投稿者/ かけ出しVB 一般人(1回)-(2021/12/14(Tue) 21:12:18)
  • アイコン環境/言語:[vb] 
    分類:[.NET] 

    表題通り、//./の意味は?
    pipeで、出てきます?
    //./の下にpipeフォルダが作られて、そこに何か作ってそれを、互いに見に行くことで成り立っているみたいです!
    client側の"."は、ローカルの//./って意味ですよね?
違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34980 / ResNo.1)  Re[1]: //./の意味は?
□投稿者/ Hongliang 大御所(613回)-(2021/12/14(Tue) 22:44:37)
  • アイコンWindowsの名前付きパイプの話であれば、ここに一通り説明があります。
    https://docs.microsoft.com/en-us/windows/win32/ipc/pipe-names
    まず、区切り文字はスラッシュ "/" ではなくてバックスラッシュ "\" です。
    基本形は
    \\ServerName\pipe\PipeName
    となっています。ServerNameがサーバ名、pipeは固定文字列、PipeNameが個々の名前付きパイプを識別するパイプ名ですね。
    サーバ名が "." となっているのはお考えの通りローカルを指しています。
    なお名前付きパイプの名前は物理的なファイルやフォルダとは関係ないので、pipe がpipeフォルダを指しているというわけではないです。
違反を報告
引用返信
■34981 / ResNo.2)  Re[2]: //./の意味は?
□投稿者/ かけだしVB 一般人(1回)-(2021/12/16(Thu) 16:59:13)
  • アイコンHongliangさん
    お礼の返事が遅くなりすみませんでした
    教えて頂いたページを読んで、追加質問をと考えていたら時間が過ぎてしまいました。
    てっきり、物理的フォルダーを仮に作って、そこにファイルを書き込むか?作業領域として使っているのか?と思っていましたが、そんな単純じゃないんですね?
    教えて頂いたページにwin32とあるので、C言語に対するページですかね?
    VBのコードが無かったので・・・・
    ありがとうございました。
    勉強を続けます。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34976 / 親記事)  バイナリーファイルの結合と分解
□投稿者/ よっし〜 一般人(3回)-(2021/12/14(Tue) 08:18:42)
  • アイコン環境/言語:[VB2013] 
    分類:[.NET] 

    お疲れ様です。直接VSの内容でな無いのですが、皆様にアイデアをお伺いしたく投稿しました。

    現在3つのファイルを結合して1つのファイルにして保存し、その後保存したファイルの中から
    1つのファイルを取り出せないか検討中です。
    例として、「ABC.XLS」と「EFG.PDF」と「HIJ.JPG」を1つの「XYZ.DAT」として保存します。
    後から「EFG.PDF」を取り出して復元したいのです。

    私の考えですとReadAllBytesで「ABC.XLS」+「EFG.PDF」+「HIJ.JPG」→WriteAllBytes「XYZ.DAT」で、取り出す用に
    ヘッダー情報として各ファイルのファイル名やバイト範囲(バイト数)を「XYZ.DAT」の前に付けたものを保存すればできるのかな・・と
    考えております。
    ただ「XYZ.DAT」は「ヘッダー情報」+「各ファイル」となっているので、今度「ヘッダー情報」とファイルの区切りが分かりません。
    この場合、各情報の間に何か「区切り文字」と入れて分解する方法がセオリーでしょうか??

    皆様のアイデアをお教えください。


違反を報告
引用返信

▽[全レス2件(ResNo.1-2 表示)]
■34977 / ResNo.1)  Re[1]: バイナリーファイルの結合と分解
□投稿者/ 魔界の仮面弁士 大御所(1414回)-(2021/12/14(Tue) 10:05:41)
  • アイコン
    No34976に返信(よっし〜さんの記事)
    > 現在3つのファイルを結合して1つのファイルにして保存し、
    zip などの「アーカイブ」では駄目なのでしょうか?
    ファイル名、ファイルサイズ、タイムスタンプまで保持できますし、
    データ破損チェックの仕組みも備えています。
    
    あるいは、それぞれのバイナリを画素データと見做したうえで、
    マルチページTIFFや Animated GIF とするという手法もあります。
    (ストライドに気を使う必要があるので、zip の方が楽だとは思いますが)
    
    
    どんなフォーマットでも良いなら、こういう手も。
    
    <Serializable>
    Public Class FileInfo
        Public Property Name As String
        Public Property Binary As Byte()
        Public Sub New()
            Name = Nothing
            Binary = New Byte(-1) {}
        End Sub
        Public Sub New(filePath As String)
            Name = filePath
            Binary = File.ReadAllBytes(filePath)
        End Sub
    End Class
    
    Sub Main()
        Dim saveData As FileInfo() = {
            New FileInfo("D:\ABC.XLS"),
            New FileInfo("D:\EFG.PDF"),
            New FileInfo("D:\HIJ.JPG")
        }
    
        '保存処理
        Dim serializer As New BinaryFormatter()
        Using outStream As New FileStream("D:\XYZ.DAT", FileMode.Create)
            serializer.Serialize(outStream, saveData)
        End Using
    
    
        '読み取り処理
        Dim loadedData As FileInfo()
        Dim deserializer As New BinaryFormatter()
        Using inStream As New FileStream("D:\XYZ.DAT", FileMode.Open)
            loadedData = DirectCast(deserializer.Deserialize(inStream), FileInfo())
        End Using
    
        Console.WriteLine($"ファイル数={loadedData.Length}")
        For Each info In loadedData
            Console.WriteLine($" 名前={info.Name}")
            Console.WriteLine($" 長さ={info.Binary.Length}")
            Console.WriteLine($" 内容={BitConverter.ToString(info.Binary.Take(16).ToArray())}")
        Next
    End Sub

違反を報告
引用返信
■34978 / ResNo.2)  Re[2]: バイナリーファイルの結合と分解
□投稿者/ よっし〜 一般人(4回)-(2021/12/14(Tue) 11:03:04)
  • アイコン魔界の仮面弁士さん、早速のご教示、有り難うございます。

    あれだけ悩んでゴロゴリとしていたのに、これだけシンプルな方法で且つファイル名などの格納出来るなんて感動です。
    (私もまだまだだと痛感しました)
    ファイルをクラス化するなど、目から鱗です。

    どうも有り難うございました。


    No34977に返信(魔界の仮面弁士さんの記事)
    > ■No34976に返信(よっし〜さんの記事)
    > どんなフォーマットでも良いなら、こういう手も。

解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-2]



■記事リスト / ▲上のスレッド
■34971 / 親記事)  表の最後の行の下にDropできない
□投稿者/ vett 一般人(1回)-(2021/11/25(Thu) 07:24:16)
  • アイコン環境/言語:[Windows10 64Bit VB.NET .NET Framework4.5] 
    分類:[.NET] 

    ListViewのDetailモードで表形式に表示しています。
    任意のItemを選択してDragDrop動作はできたのですが、
    表の最下部にだけDropできません。
    Drag中に表示される黒い太線(境界線)が最下部に移動しないようです。
    その他のところには問題なく太い黒線表示され移動できています。
    なにか設定が不足しているのでしょうか?

違反を報告
引用返信

▽[全レス1件(ResNo.1-1 表示)]
■34973 / ResNo.1)  Re[1]: 表の最後の行の下にDropできない
□投稿者/ 魔界の仮面弁士 大御所(1413回)-(2021/11/25(Thu) 09:59:24)
  • アイコン
    No34971に返信(vettさんの記事)
    > ListViewのDetailモードで表形式に表示しています。
    WPF にも ASP.NET にも WinForms にも ListView があるんですよね…。
    
    "Detail" というのは、
    "Details" のことでしょうか。
    
    とりあえず WinForms 版 ListView の Views プロパティのことだと仮定します。
    
    
    > 任意のItemを選択してDragDrop動作はできたのですが、
    どのようにしてそれを実装したのかを明示して頂かないと、
    問題点を指摘しにくいです…(想像で補って回答せねばならない)。
    
    
    > 表の最下部にだけDropできません。
    > Drag中に表示される黒い太線(境界線)が最下部に移動しないようです。
    WinForms 版 ListView だとした場合、
    .InsertionMark.AppearsAfterItem の切り替え部をどのように実装していますか?
    
    
    サンプルを書いてみました。手抜き実装ですが。
    
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            ListView1.BeginUpdate()
            ListView1.AllowDrop = True
            ListView1.View = View.Details
            ListView1.GridLines = True
            ListView1.FullRowSelect = True
            ListView1.Columns.Clear()
            ListView1.Columns.Add("Name")
            For Each f In System.IO.Directory.GetDirectories("C:\Program Files")
                ListView1.Items.Add(System.IO.Path.GetFileName(f))
            Next
            ListView1.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.ColumnContent)
            ListView1.EndUpdate()
        End Sub
    
        Private Sub ListView1_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles ListView1.ItemDrag
            ListView1.DoDragDrop(e.Item, DragDropEffects.Move)
        End Sub
    
        Private Sub ListView1_DragEnter(sender As Object, e As DragEventArgs) Handles ListView1.DragEnter
            e.Effect = e.AllowedEffect
        End Sub
    
        Private Sub ListView1_DragLeave(sender As Object, e As EventArgs) Handles ListView1.DragLeave
            ListView1.InsertionMark.Index = -1
        End Sub
    
        Private Sub ListView1_DragDrop(sender As Object, e As DragEventArgs) Handles ListView1.DragDrop
            Dim targetIndex = ListView1.InsertionMark.Index
            If targetIndex = -1 Then
                Return
            ElseIf ListView1.InsertionMark.AppearsAfterItem Then
                targetIndex += 1
            End If
            Dim draggedItem = DirectCast(e.Data.GetData(GetType(ListViewItem)), ListViewItem)
            ListView1.Items.Insert(targetIndex, DirectCast(draggedItem.Clone(), ListViewItem))
            ListView1.Items.Remove(draggedItem)
        End Sub
    
        Private Sub ListView1_DragOver(sender As Object, e As DragEventArgs) Handles ListView1.DragOver
            Dim targetPoint = ListView1.PointToClient(New Point(e.X, e.Y))
            Dim targetIndex As Integer = ListView1.InsertionMark.NearestIndex(targetPoint)
            If targetIndex > -1 Then
                Dim itemBounds = ListView1.GetItemRect(targetIndex)
                ListView1.InsertionMark.AppearsAfterItem = targetPoint.Y > itemBounds.Top + itemBounds.Height \ 2
            End If
            ListView1.InsertionMark.Index = targetIndex
        End Sub
    End Class

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-1]






Mode/  Pass/


- Child Tree -

2023/03/30(Thu) 07:14:24 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする