【问题标题】:.NET creating corrupt files.NET 创建损坏的文件
【发布时间】:2012-04-17 17:11:41
【问题描述】:

我正在尝试使用 .NET 创建图像。下面是我正在使用的代码。这在大多数情况下都可以正常工作,但有时我猜想流被切断并且我有一个损坏的文件。我通过它的 URL 获取图像。

我真的在找人来纠正我的代码或让我了解我还能做些什么。

谢谢

// Function will return the number of bytes processed
        // to the caller. Initialize to 0 here.
        int bytesProcessed = 0;

        // Assign values to these objects here so that they can
        // be referenced in the finally block
        Stream remoteStream = null;
        Stream localStream = null;
        WebResponse response = null;

        // Use a try/catch/finally block as both the WebRequest and Stream
        // classes throw exceptions upon error
        try
        {
            // Create a request for the specified remote file name
            WebRequest request = WebRequest.Create(remoteFilename);
            if (request != null)
            {
                // Send the request to the server and retrieve the
                // WebResponse object 
                response = request.GetResponse();
                if (response != null)
                {
                    // Once the WebResponse object has been retrieved,
                    // get the stream object associated with the response's data
                    remoteStream = response.GetResponseStream();

                    // Create the local file
                    localStream = File.Create(localFilename);

                    // Allocate a 1k buffer
                    byte[] buffer = new byte[1024];
                    int bytesRead;

                    // Simple do/while loop to read from stream until
                    // no bytes are returned
                    do
                    {
                        // Read data (up to 1k) from the stream
                        bytesRead = remoteStream.Read(buffer, 0, buffer.Length);

                        // Write the data to the local file
                        localStream.Write(buffer, 0, bytesRead);

                        // Increment total bytes processed
                        bytesProcessed += bytesRead;
                    } while (bytesRead > 0);
                }
            }
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            // Close the response and streams objects here 
            // to make sure they're closed even if an exception
            // is thrown at some point
            if (response != null) response.Close();
            if (remoteStream != null) remoteStream.Close();
            if (localStream != null) localStream.Close();
        }

我收到以下错误:

Main Exception
MESSAGE: Parameter is not valid.
SOURCE: System.Drawing
TARGETSITE: System.Drawing.Image FromStream(System.IO.Stream, Boolean, Boolean)
STACKTRACE: at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
            at Sitecore.Resources.Media.ImageMedia.GetImage() at Sitecore.Resources.Media.ImageMedia.UpdateMetaData(MediaStream mediaStream)
            at Sitecore.Resources.Media.JpegMedia.UpdateMetaData(MediaStream mediaStream) at Sitecore.Resources.Media.MediaCreator.AttachStreamToMediaItem(Stream stream, String itemPath, String fileName, MediaCreatorOptions options)
            at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, MediaCreatorOptions options)
            at Sitecore.Resources.Media.MediaCreator.CreateFromFile(String filePath, MediaCreatorOptions options)

【问题讨论】:

  • 有没有发现异常??他们说什么??
  • 为什么你捕获一个异常只是为了再次抛出它,却丢失了堆栈跟踪?为什么不使用using 语句?
  • 有时中断的 TCP 连接不会给出任何错误,只是表现得像到达了流的末尾。当我用 C# 编写下载器时,我下载到一个临时文件,并且只有在验证预期大小(来自 http 标头)与下载的大小匹配后才将其移动到目标文件名。
  • 图像文件实际包含 http 404 错误消息的几率是多少?或者真的什么。用十六进制查看器看看它。
  • @CodesInChaos 有时如如何?从对等体内部的 TCP 连接获取流结束的唯一方法是发送一个 FIN,根据定义,这是一个完成的连接,而不是中断的连接。

标签: .net file stream


【解决方案1】:

问题在于文件被 Windows 锁定。基本上,有两台服务器。将文件保存在另一台服务器上它应该在的位置,并且一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2019-07-11
    相关资源
    最近更新 更多