작은 청크로 파일을 복사하고 싶습니다 (필요한 경우 복사 작업을 취소).작은 덩어리로 파일 복사
나는 여기에 표시되지 않은 솔루션을 따라하기 위해 노력하고있어 : How to copy a file with the ability to cancel the copy?
을하지만 0 바이트 파일 내가 잘못 무엇
받고 있어요?
Public Class Form1
Dim cancelled As Boolean = Nothing
Dim input = New System.IO.FileStream("C:\1.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim output = New System.IO.FileStream("C:\Nueva carpeta\1.txt", System.IO.FileMode.CreateNew, System.IO.FileAccess.Write, System.IO.FileShare.Write)
Public Sub CopyStream(ByVal inputStream As System.IO.Stream, ByVal outputStream As System.IO.Stream)
'Dim buffer = System.IO.File.ReadAllBytes("C:\1.txt")
Dim buffer = New Byte((1024) - 1) {}
Dim bytesRead As Integer = 1
While (inputStream.Read(buffer, 0, buffer.Length) > 0)
outputStream.Write(buffer, 0, bytesRead)
'bytesRead += 1
If cancelled Then
MsgBox("operacion cancelada")
Return
End If
End While
inputStream.Close()
outputStream.Close()
MsgBox("operacion terminada")
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
CopyStream(input, output)
End Sub
End Class
**
UPDATE 1 :
** 내가 Virtlink 응답의 단계를 수행하고 내 원래의 코드에서 누락 된 부분을 넣어하는 tryed했습니다
,하지만 난 여전히 0 바이트 파일을 받고.
> Public Class Form1
Dim input = New System.IO.FileStream("C:\Test.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim output = New System.IO.FileStream("C:\Test_New.txt", System.IO.FileMode.CreateNew, System.IO.FileAccess.Write, System.IO.FileShare.Write)
Public Sub CopyStream(ByVal inputStream As System.IO.Stream, ByVal outputStream As System.IO.Stream)
Dim buffer = New Byte(1024) {}
Dim bytesRead As Integer
' Read some bytes
While (bytesRead = inputStream.Read(buffer, 0, buffer.Length) > 0)
' Write them to the output
outputStream.Write(buffer, 0, bytesRead)
End While
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
CopyStream(input, output)
End Sub
End Class
**
업데이트 2 :
**
MY 최근의 실패 TRY :
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim input_filepath As String = "C:\Test.txt", output_filepath As String = "C:\Test_New.txt"
Dim input = New System.IO.FileStream(input_filepath, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)
Dim output = New System.IO.FileStream(output_filepath, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite)
CopyStream(input, output)
' For Testing:
If New IO.FileInfo(output_filepath).Length = 0 Then IO.File.Delete(output_filepath) : Application.Exit() Else Process.Start("Notepad", output_filepath)
End Sub
Public Sub CopyStream(ByVal inputStream As System.IO.Stream, ByVal outputStream As System.IO.Stream)
Dim buffer = New Byte(1024) {}, bytesRead As Integer
While ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
outputStream.Write(buffer, 0, bytesRead)
End While
inputStream.Flush() : outputStream.Flush()
inputStream.Close() : outputStream.Close()
End Sub
End Class
,691,363 (210)
**
UPDATE 3 :
**
솔루션
나는에 값을 할당 할 수 없습니다 VB.NET에 있었다 문제 루프 조건의 변수입니다. 따라서 Sub가 작동합니다. Sub :
Public Sub CopyStream(ByVal inputStream As Stream, ByVal outputStream As Stream)
Dim buffer = New Byte(1025) {}
Dim bytesRead As Integer = 0
Do
bytesRead = inputStream.Read(buffer, 0, buffer.Length)
If bytesRead > 0 Then
outputStream.Write(buffer, 0, bytesRead)
End If
Loop While (bytesRead > 0)
outputStream.Flush()
inputStream.Close() : outputStream.Close()
End Sub
다음 단 하나의 아웃 쓰기 :이 내 컴퓨터에서 작동합니다. 분명히 올바른 코드가 아닙니다. –
그 이유는 내가 올바른 방법을 모르는 때문에 질문을 물어 이유지만, 적어도 내가 검색하고 물어 전에 그것을 tryed했습니다, 당신은 정말 downvote과 클로저 자격이 있다고 생각한다면 ... 음, 어쨌든 코멘트를 위해. – ElektroStudios
링크 된 코드 줄을 올바르게 번역하지 않았습니다. 나는 그 코드를 다시 보는 것이 좋습니다. –