【问题标题】:Stream.CopyTo() does not copy data under a certain lengthStream.CopyTo() 不复制一定长度以下的数据
【发布时间】:2015-07-13 21:59:02
【问题描述】:

我目前正在开发一个 Windows 应用商店应用程序,我必须在其中拍照,将其保存在本地,然后在调用同步时将其发送到将图片保存在服务器上的服务。

我在复制这些图片时遇到问题。我要做的是:

  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("\\SERVER\Data\name.jpg", FileMode.Create)
        Dim memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
        memory.position = 0
        memory.CopyTo(fs)
    Next
    

此代码对我有用,除非图片尺寸小到一定程度。我注意到当我的ByteArray 的lenght 在4000 或更低 左右时,图片无法正确复制。当我在我的 Windows 照片查看器 中打开它时,我收到以下错误:

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

知道什么可能导致这个问题或如何解决它吗?

【问题讨论】:

    标签: .net vb.net web-services stream file-transfer


    【解决方案1】:

    尝试将两个流放入Using 块:

    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
    

    Using 块应该在任何地方使用:

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

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

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

    【讨论】:

    • 是的,它有效。我不太明白using 有什么不同
    • Nvm 我已经阅读了msdn.microsoft.com/en-us/library/htd05whh.aspx 这使得它更清晰
    • 所以,帮助一个老家伙。 “nvm”是什么意思? “没关系”?
    • 是的,就是这个意思
    • 谢谢。今天学到了一些新东西。
    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多