@ƒoƒCƒiƒŠEƒtƒ@ƒCƒ‹iƒeƒLƒXƒgEƒtƒ@ƒCƒ‹ˆÈŠO‚̃tƒ@ƒCƒ‹j‚ð“Ç‚Ý‘‚«‚·‚é‚É‚ÍAFileStreamƒNƒ‰ƒXiSystem.IO–¼‘O‹óŠÔj‚ð—˜—p‚·‚éB
@FileStreamƒNƒ‰ƒX‚̓tƒ@ƒCƒ‹—p‚̃XƒgƒŠ[ƒ€‚ðƒTƒ|[ƒg‚·‚éƒNƒ‰ƒX‚Å‚ ‚èAStreamƒNƒ‰ƒXiSystem.IO–¼‘O‹óŠÔj‚Ì”h¶ƒNƒ‰ƒX‚Ì1‚‚¾*BŠî–{“I‚É‚ÍAƒRƒ“ƒXƒgƒ‰ƒNƒ^‚ÅŽw’肵‚½ƒtƒ@ƒCƒ‹‚̃XƒgƒŠ[ƒ€‚ɑ΂µ‚ÄASeekƒƒ\ƒbƒh‚É‚æ‚è“Ç‚Ý‘‚«‚ðs‚¤ˆÊ’uŒˆ‚ß‚ðs‚¢AReadƒƒ\ƒbƒh^Writeƒƒ\ƒbƒh‚Å“Ç‚Ý‘‚«‚ðs‚¤B
@FileStreamƒNƒ‰ƒX‚ÌReadƒƒ\ƒbƒh‚Å‚ÍAƒpƒ‰ƒ[ƒ^‚Æ‚µ‚ÄA“Ç‚Ýž‚ñ‚¾ƒf[ƒ^‚ðŠi”[‚·‚邽‚ß‚Ìbyte”z—ñA“Ç‚Ýž‚ñ‚¾ƒf[ƒ^‚ð‘‚«ž‚Þi”z—ñ“à‚ÌjˆÊ’uA“Ç‚Ýž‚ÞƒoƒCƒg”‚ðŽw’è‚·‚éB
@ƒtƒ@ƒCƒ‹‚̂ǂ̈ʒu‚̃f[ƒ^‚ð“Ç‚Ýž‚Þ‚©‚ÍReadƒƒ\ƒbƒh‚Å‚ÍŽw’肵‚È‚¢B“Ç‚Ýž‚Ý‚ÌŠJŽnˆÊ’u‚ÍFileStreamƒIƒuƒWƒFƒNƒg‚É‚æ‚èƒXƒgƒŠ[ƒ€‚ÌuŒ»ÝˆÊ’uv‚Æ‚µ‚ÄŠÇ—‚³‚ê‚Ä‚¨‚èA‚±‚ê‚ÍReadƒƒ\ƒbƒh‚ðŒÄ‚Ño‚·‚½‚Ñ‚ÉA“Ç‚Ýž‚ñ‚¾•ª‚¾‚¯æ‚Éi‚ÞB‚‚܂èAŒJ‚è•Ô‚µReadƒƒ\ƒbƒh‚ðŒÄ‚Ño‚·‚±‚Æ‚É‚æ‚èA‡ŽŸƒf[ƒ^‚ð“Ç‚Ýž‚ñ‚Å‚¢‚¯‚é‚Æ‚¢‚¤‚킯‚¾B
@ƒtƒ@ƒCƒ‹‚Ì”CˆÓ‚̈ʒu‚̃f[ƒ^‚ð“Ç‚Ýž‚Þ‚É‚ÍA‚ ‚ç‚©‚¶‚ßSeekƒƒ\ƒbƒh‚É‚æ‚èƒXƒgƒŠ[ƒ€‚ÌŒ»ÝˆÊ’u‚ðˆÚ“®‚³‚¹‚éBSeekƒƒ\ƒbƒh‚Ì‘æ1ƒpƒ‰ƒ[ƒ^‚Å‚ÍAŒ»ÝˆÊ’u‚ðŽ¦‚·ƒIƒtƒZƒbƒg‚ðlongŒ^‚Ì’l‚ÅŽw’è‚·‚éB‘æ2ƒpƒ‰ƒ[ƒ^‚Å‚ÍA‚»‚ꂪ擪‚ ‚é‚¢‚Í––”ö‚©‚ç‚̃IƒtƒZƒbƒg‚Å‚ ‚é‚©AŒ»ÝˆÊ’u‚©‚ç‚̃IƒtƒZƒbƒg‚Å‚ ‚é‚©‚ðSeekOrigin—ñ‹“‘ÌiSystem.IO–¼‘O‹óŠÔj‚Ì’l‚É‚æ‚èŽw’è‚·‚éB
@Readƒƒ\ƒbƒh‚Ì–ß‚è’l‚ÍAŽÀÛ‚É“Ç‚Ýž‚ñ‚¾ƒoƒCƒg”‚Æ‚È‚éBƒtƒ@ƒCƒ‹‚Ì––”ö•t‹ß‚Å‚ÍA‚±‚Ì’l‚Í‘æ3ƒpƒ‰ƒ[ƒ^‚ÅŽw’肵‚½’li“Ç‚Ýž‚ÞƒoƒCƒg”j‚æ‚è‚ଂ³‚‚È‚é‰Â”\«‚ª‚ ‚éB‚Ü‚½AƒXƒgƒŠ[ƒ€‚ÌŒ»ÝˆÊ’u‚ªƒtƒ@ƒCƒ‹‚Ì––”ö‚É’B‚µ‚Ä‚¢‚éꇂɂÍAReadƒƒ\ƒbƒh‚Ì–ß‚è’l‚Í0‚Æ‚È‚éB
@ŽŸ‚̃R[ƒh‚ÍAƒoƒCƒiƒŠEƒtƒ@ƒCƒ‹utest.binv‚ðƒI[ƒvƒ“‚µAbyte”z—ñ‚É1024bytes‚¸‚“ǂݞ‚ÞƒTƒ“ƒvƒ‹EƒvƒƒOƒ‰ƒ€‚Å‚ ‚éBFileStreamƒNƒ‰ƒX‚Å‚ÍALengthƒvƒƒpƒeƒB‚É‚æ‚èƒI[ƒvƒ“‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚̃TƒCƒY‚ðŽæ“¾‚Å‚«‚éB
// binread.cs
using System;
using System.IO;
class BinaryRead {
static void Main(string[] args) {
FileStream fs = new FileStream(
@"test.bin", FileMode.Open, FileAccess.Read);
int fileSize = (int)fs.Length; // ƒtƒ@ƒCƒ‹‚̃TƒCƒY
byte[] buf = new byte[fileSize]; // ƒf[ƒ^Ši”[—p”z—ñ
int readSize; // Readƒƒ\ƒbƒh‚Å“Ç‚Ýž‚ñ‚¾ƒoƒCƒg”
int remain = fileSize; // “Ç‚Ýž‚ނׂ«Žc‚è‚̃oƒCƒg”
int bufPos = 0; // ƒf[ƒ^Ši”[—p”z—ñ“à‚̒ljÁˆÊ’u
while (remain > 0) {
// 1024Bytes‚¸‚“ǂݞ‚Þ
readSize = fs.Read(buf, bufPos, Math.Min(1024, remain));
bufPos += readSize;
remain -= readSize;
}
fs.Dispose();
}
}
// ƒRƒ“ƒpƒCƒ‹•û–@Fcsc binread.cs
|
binread.cs‚̃_ƒEƒ“ƒ[ƒh
' binread.vb
Imports System
Imports System.IO
Class BinaryRead
Shared Sub Main(ByVal args As String())
Dim fs As New FileStream( _
"test.bin", FileMode.Open, FileAccess.Read)
Dim fileSize As Integer = CInt(fs.Length) ' ƒtƒ@ƒCƒ‹‚̃TƒCƒY
Dim buf(fileSize - 1) As Byte ' ƒf[ƒ^Ši”[—p”z—ñ
Dim readSize As Integer ' Readƒƒ\ƒbƒh‚Å“Ç‚Ýž‚ñ‚¾ƒoƒCƒg”
Dim remain As Integer = fileSize ' “Ç‚Ýž‚ނׂ«Žc‚è‚̃oƒCƒg”
Dim bufPos As Integer = 0 ' ƒf[ƒ^Ši”[—p”z—ñ“à‚̒ljÁˆÊ’u
While remain > 0
' 1024Bytes‚¸‚“ǂݞ‚Þ
readSize = fs.Read(buf, bufPos, Math.Min(1024, remain))
bufPos += readSize
remain -= readSize
End While
End Sub
End Class
' ƒRƒ“ƒpƒCƒ‹•û–@Fvbc binread.vb
|
binread.vb‚̃_ƒEƒ“ƒ[ƒh
@‚±‚±‚Å‚Í‹Lq—á‚ðŽ¦‚·‚½‚ß‚É1024bytes‚¸‚ƒtƒ@ƒCƒ‹‚ð“Ç‚Ýž‚ñ‚Å‚¢‚邪Ai“Ç‚Ýž‚Þƒtƒ@ƒCƒ‹‚̃TƒCƒY‚ª‹‘å‚Å‚È‚¯‚ê‚ÎjŽŸ‚̂悤‚É‚µ‚Ä‘S‘Ì‚ðˆê“x‚É“Ç‚Ýž‚ñ‚Å‚à‚æ‚¢B
readSize = fs.Read(buf, 0, fs.Length)
|
@ˆê•ûAƒoƒCƒiƒŠEƒf[ƒ^ibyte”z—ñj‚ðƒtƒ@ƒCƒ‹‚É‘‚«ž‚Þ‚É‚ÍAWriteƒƒ\ƒbƒh‚ðŽg—p‚·‚éBWriteƒƒ\ƒbƒh‚̃pƒ‰ƒ[ƒ^‚É‚ÍAƒf[ƒ^‚ªŠi”[‚³‚ê‚Ä‚¢‚ébyte”z—ñA‘‚«ž‚Þƒf[ƒ^‚Ì”z—ñ“à‚ł̈ʒuA‘‚«ž‚ÞƒoƒCƒg”‚ðŽw’è‚·‚éBReadƒƒ\ƒbƒh‚Æ“¯—l‚ÉA‘‚«ž‚ވʒu‚̓XƒgƒŠ[ƒ€‚ÌŒ»ÝˆÊ’u‚Æ‚È‚éiWriteƒƒ\ƒbƒh‚Æãq‚µ‚½Seekƒƒ\ƒbƒh‚̃R[ƒh—á‚ɂ‚¢‚Ä‚ÍAŽŸ‚̃Tƒ“ƒvƒ‹EƒvƒƒOƒ‰ƒ€‚ðŽQÆjB
@ŽŸ‚̃R[ƒh‚ÍAReadAWriteASeekƒƒ\ƒbƒh‚ðŽg—p‚µ‚½ƒTƒ“ƒvƒ‹EƒvƒƒOƒ‰ƒ€‚Å‚ ‚éB‚±‚̃vƒƒOƒ‰ƒ€‚Å‚ÍA“Ç‚Ýž‚ÝŽž‚̃Gƒ‰[‚𖳎‹‚µ‚ăRƒs[‚ðs‚¤i“Ç‚ÝŽæ‚ê‚È‚©‚Á‚½•”•ª‚Í0‚Å–„‚ß‚éjB
@‚Ì•t‚¢‚½DVD‚È‚Ç‚ð“Ç‚à‚¤‚Æ‚µ‚½‚çACRCƒGƒ‰[‚ªo‚Ä‚µ‚Ü‚Á‚½‚ªAˆê•”Œ‡‘¹‚µ‚Ä‚¢‚Ä‚à‚æ‚¢‚Ì‚ÅA‚Æ‚É‚©‚ƒtƒ@ƒCƒ‹‚ðƒRƒs[‚µ‚½‚¢‚Æ‚¢‚Á‚½ê‡‚É—˜—p‚Å‚«‚éƒvƒƒOƒ‰ƒ€‚¾B
// bincopy.cs
using System;
using System.IO;
class BinaryCopy {
static void Main(string[] args) {
string srcName = args[0]; // ƒRƒs[Œ³‚̃tƒ@ƒCƒ‹–¼
string destName = args[1]; // ƒRƒs[æ‚̃tƒ@ƒCƒ‹–¼
const int BUFSIZE = 2048; // 1“x‚Ɉ—‚·‚éƒTƒCƒY
byte[] buf = new byte[BUFSIZE]; // “Ç‚Ýž‚Ý—pƒoƒbƒtƒ@
byte[] ZEROARRAY = new byte[BUFSIZE]; // 0–„‚ß—p
int readSize; // Readƒƒ\ƒbƒh‚Å“Ç‚Ýž‚ñ‚¾ƒoƒCƒg”
using (FileStream src = new FileStream(
srcName, FileMode.Open, FileAccess.Read))
using (FileStream dest = new FileStream(
destName, FileMode.Create, FileAccess.Write)) {
while (true) {
try {
readSize = src.Read(buf, 0, BUFSIZE); // “Ç‚Ýž‚Ý
} catch {
// “Ç‚Ýž‚Ý‚ÉŽ¸”s‚µ‚½ê‡
Console.WriteLine("read error at " + src.Position);
if (src.Length - src.Position < BUFSIZE) {
readSize = (int)(src.Length - src.Position);
} else {
readSize = BUFSIZE;
}
src.Seek(readSize, SeekOrigin.Current);
dest.Write(ZEROARRAY, 0, readSize); // 0–„‚ß‚Å‘‚«ž‚Ý
continue;
}
if (readSize == 0) {
break; // ƒRƒs[Š®—¹
}
dest.Write(buf, 0, readSize); // ‘‚«ž‚Ý
}
}
}
}
// ƒRƒ“ƒpƒCƒ‹•û–@Fcsc bincopy.cs
|
bincopy.cs‚̃_ƒEƒ“ƒ[ƒh
' bincopy.vb
Imports System
Imports System.IO
Class BinaryCopy
Shared Sub main(ByVal args As String())
Dim srcName As String = args(0) ' ƒRƒs[Œ³‚̃tƒ@ƒCƒ‹–¼
Dim destName As String = args(1) ' ƒRƒs[æ‚̃tƒ@ƒCƒ‹–¼
Dim BUFSIZE As Integer = 2048 ' 1“x‚Ɉ—‚·‚éƒTƒCƒY
Dim buf(BUFSIZE) As Byte ' “Ç‚Ýž‚Ý—pƒoƒbƒtƒ@
Dim ZEROARRAY(BUFSIZE) As Byte ' 0–„‚ß—p
Dim readSize As Integer ' Readƒƒ\ƒbƒh‚Å“Ç‚Ýž‚ñ‚¾ƒoƒCƒg”
Using src As New FileStream( _
srcName, FileMode.Open, FileAccess.Read)
Using dest As New FileStream( _
destName, FileMode.Create, FileAccess.Write)
While True
Try
readSize = src.Read(buf, 0, BUFSIZE) ' “Ç‚Ýž‚Ý
Catch
' “Ç‚Ýž‚Ý‚ÉŽ¸”s‚µ‚½ê‡
Console.WriteLine("read error at " & src.Position)
If src.Length - src.Position < BUFSIZE Then
readSize = CLng(src.Length - src.Position)
Else
readSize = BUFSIZE
End If
src.Seek(readSize, SeekOrigin.Current)
dest.Write(ZEROARRAY, 0, readSize) ' 0–„‚ß‚Å‘‚«ž‚Ý
Continue While
End Try
If readSize = 0 Then
Exit While ' ƒRƒs[Š®—¹
End If
dest.Write(buf, 0, readSize) ' ‘‚«ž‚Ý
End While
End Using
End Using
End Sub
End Class
' ƒRƒ“ƒpƒCƒ‹•û–@Fvbc bincopy.vb
|
bincopy.vb‚̃_ƒEƒ“ƒ[ƒh
@ƒvƒƒOƒ‰ƒ€‚Å‚ÍAReadƒƒ\ƒbƒh‚ªŽ¸”s‚µ‚½‚Æ‚«‚É‚Íi‚±‚Ìꇂɂ͗áŠO‚ª”¶‚·‚éjA“Ç‚Ýž‚Ý—p‚̃XƒgƒŠ[ƒ€‚ðSeekƒƒ\ƒbƒh‚É‚æ‚èi‚ßA‘‚«ž‚Ý—p‚̃XƒgƒŠ[ƒ€‚É‚Í0‚ð‘‚«ž‚ÞBFileStreamƒNƒ‰ƒX‚ÌPositionƒvƒƒpƒeƒB‚̓XƒgƒŠ[ƒ€‚ÌŒ»ÝˆÊ’u‚ð•\‚·B
@‚È‚¨ASeekƒƒ\ƒbƒh‚ÍFileStreamƒIƒuƒWƒFƒNƒg‚ª“à•”‚ÅŠÇ—‚·‚錻݈ʒu‚ðˆÚ“®‚·‚邾‚¯‚ÅAƒtƒ@ƒCƒ‹‚Ì“Ç‚Ýž‚ß‚È‚¢•”•ª‚ÉŒ»ÝˆÊ’u‚ðˆÚ“®‚µ‚½‚Æ‚µ‚Ä‚àŒÄ‚Ño‚µ‚ÍŽ¸”s‚µ‚È‚¢BŽÀۂɃGƒ‰[‚ª”¶‚·‚é‚Ì‚ÍA‚»‚ÌŒã‚ÉReadƒƒ\ƒbƒh‚ðŒÄ‚Ño‚µ‚½ê‡‚Å‚ ‚éB