回答編集履歴

4

修正

2021/04/09 01:37

投稿

退会済みユーザー
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- '無限に待たれても困るので、タイムアウトがInfiniteTimeoutならとりあえず10秒に設定
17
+ '無限に待たれても困るので、ReadTimeoutがInfiniteTimeoutならとりあえず10秒に設定
18
18
 
19
19
  If st.ReadTimeout = SerialPort.InfiniteTimeout Then
20
20
 

3

修正

2021/04/09 01:37

投稿

退会済みユーザー
test CHANGED
@@ -1 +1,77 @@
1
- 試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
1
+ ~~試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、~~戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
2
+
3
+
4
+
5
+ BaseStreamはReadTimeoutを考慮してくれないようなので、SerialPortオブジェクトをそのまま使用した方がよいかもしれません。サンプルソースを少し弄ってみました。(デバッグはしてないです)
6
+
7
+ ```vbnet
8
+
9
+ Public Function ReadBinaryData(st As SerialPort) As Byte()
10
+
11
+
12
+
13
+ Dim buf(32768) As Byte ' 一時バッファ
14
+
15
+
16
+
17
+ '無限に待たれても困るので、タイムアウトがInfiniteTimeoutならとりあえず10秒に設定
18
+
19
+ If st.ReadTimeout = SerialPort.InfiniteTimeout Then
20
+
21
+ st.ReadTimeout = 10000
22
+
23
+ End If
24
+
25
+
26
+
27
+ Using ms As New MemoryStream()
28
+
29
+
30
+
31
+ While (True)
32
+
33
+ Try
34
+
35
+ ' シリアルポートから一時バッファに読み込む
36
+
37
+ Dim read As Integer = st.Read(buf, 0, buf.Length)
38
+
39
+
40
+
41
+ If read > 0 Then
42
+
43
+ ' 一時バッファの内容をメモリ・ストリームに書き込む
44
+
45
+ ms.Write(buf, 0, read)
46
+
47
+ Else
48
+
49
+ Exit While
50
+
51
+ End If
52
+
53
+
54
+
55
+ Catch ex As TimeoutException
56
+
57
+ 'タイムアウト処理も入れておく
58
+
59
+ Exit While
60
+
61
+ End Try
62
+
63
+ End While
64
+
65
+
66
+
67
+ ' メモリ・ストリームの内容をバイト配列に格納
68
+
69
+ Return ms.ToArray()
70
+
71
+
72
+
73
+ End Using
74
+
75
+ End Function
76
+
77
+ ```

2

修正

2021/04/09 01:35

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 提示されているソースのReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。
1
+ 試したことに提示されているReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。

1

修正

2021/04/09 00:10

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 提示されているソースのReadBinaryData戻ってきたバイト配列を、File.WriteAllBytesで出力すればよいのではないでしょうか。
1
+ 提示されているソースのReadBinaryDataに、SerialPortのBaseStreamを渡し、戻ってきたバイト配列を、File.WriteAllBytesでファイルに出力すればよいのではないでしょうか。