.net Stream.CopyTo()不复制特定长度下的数据
我目前正在开发一个Windows应用商店应用程序,在该应用程序中,我必须拍摄一张照片,将其保存在本地,然后在调用同步时将其发送到将照片保存在服务器上的服务 我在复制这些图片时遇到问题。我所做的是:.net Stream.CopyTo()不复制特定长度下的数据,.net,vb.net,web-services,stream,file-transfer,.net,Vb.net,Web Services,Stream,File Transfer,我目前正在开发一个Windows应用商店应用程序,在该应用程序中,我必须拍摄一张照片,将其保存在本地,然后在调用同步时将其发送到将照片保存在服务器上的服务 我在复制这些图片时遇到问题。我所做的是: 获取指定文件夹中所有图像的列表,并将其缓冲区.toarray提取到BitArray Dim fileList As IReadOnlyList(Of StorageFile) = Await folder.GetFilesAsync() For Each file As StorageFile In
缓冲区.toarray
提取到BitArray
Dim fileList As IReadOnlyList(Of StorageFile) = Await folder.GetFilesAsync()
For Each file As StorageFile In fileList
Dim Buffer As IBuffer = Await Windows.Storage.FileIO.ReadBufferAsync(file)
fileBytes = Buffer.ToArray()
lstfileBytes.Add(fileBytes)
Next file
stream.copyto()
ByteArray
的长度大约4000或更低时,图片复制不正确。当我在Windows照片查看器中打开它时,出现以下错误:
Windows照片查看器无法显示此图片,因为文件已被删除
空的
知道是什么导致了这个问题,或者如何解决它吗?尝试使用
块将两个流放入:
For i = 0 To lstMemoryPicturesReservoir.Count - 1
Using fs As FileStream = New FileStream("\\SERVER\Data\name.jpg", FileMode.Create)
Using memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
memory.position = 0
memory.CopyTo(fs)
End Using
End Using
Next
使用
块应在以下位置使用:
创建实现IDisposable
接口的类的对象,以及
在同一范围内开始和结束使用该对象
使用
确保调用IDisposable
接口的Dispose
方法,即使引发异常
在这种情况下,Dispose
方法将确保在关闭流之前刷新所有缓冲区。我怀疑最后的4000字节没有被刷新。事实上,我怀疑您最终会注意到大于4000字节的图像的奇怪问题——其中一些图像可能会丢失最后一个装满数据的缓冲区。没有足够的数据阻止它们显示,但至少可以说,它们看起来很奇怪。是的,它可以工作。我不太明白使用
会有什么不同,因为我已经读过这本书,它让我明白了,所以,帮助一个老家伙。“nvm”是什么意思?“没关系”?是的,这正是它的意思,汉克斯。今天学到了一些新东西。
For i = 0 To lstMemoryPicturesReservoir.Count - 1
Using fs As FileStream = New FileStream("\\SERVER\Data\name.jpg", FileMode.Create)
Using memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
memory.position = 0
memory.CopyTo(fs)
End Using
End Using
Next