stream.copyto()不会在一定长度下复制数据



我当前正在处理Windows Store应用程序,我必须在其中拍摄图片,然后将其保存在本地,然后将其称为同步时,将其发送到一个服务,该服务将保存图片服务器。

我在复制这些图片时遇到了问题。我要做的是以下内容:

  1. 获取指定文件夹中所有图像的列表,然后将其buffer.toarray提取到bitearray

    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
    
  2. 我然后将其发送到我的VB.NET服务,该服务将图像保存到使用stream.copyto()

    创建的文件
    For i = 0 To lstMemoryPicturesReservoir.Count - 1
        Dim fs As FileStream = New FileStream("\SERVERDataname.jpg", FileMode.Create)
        Dim memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
        memory.position = 0
        memory.CopyTo(fs)
    Next
    

此代码对我有用,除非图片大小到达特定点。我注意到,当我的ByteArraylenght围绕 4000或更低图片未正确复制。当我在 Windows Photo Viewer 中打开它时,我会收到以下错误:

Windows照片查看器无法显示此图片,因为文件是 空

对可能导致此问题或如何解决该问题的任何想法?

尝试将两个流放入Using块中:

For i = 0 To lstMemoryPicturesReservoir.Count - 1
    Using fs As FileStream = New FileStream("\SERVERDataname.jpg", FileMode.Create)
        Using memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
            memory.position = 0
            memory.CopyTo(fs)
        End Using
    End Using
Next

Using块应在任何地方使用:

  1. 创建实现IDisposable接口的类的对象,
  2. 您在同一范围内使用该对象开始并完成结束

Using确保即使抛出异常,也可以调用IDisposable接口的Dispose方法。

在这种情况下,Dispose方法将确保所有缓冲区在关闭流之前都被冲洗。我怀疑最后4000个字节没有被冲洗。实际上,我怀疑您最终会注意到大于4000个字节的图像的奇怪问题 - 其中一些会缺少最终的缓冲区。没有足够的数据来防止它们显示,但至少可以说它们看起来很奇怪。

相关内容

  • 没有找到相关文章

最新更新