【问题标题】:how to split a wmv file如何分割一个wmv文件
【发布时间】:2013-01-07 19:28:58
【问题描述】:

我正在做一个应用程序,在该应用程序中,我拆分了一个 wmv 文件并将其传输到其他位置(在“x”kbs 中)。传输完成后,文件不播放,它给出一条消息,因为格式不受支持。是否存在任何其他方式。

我会解释我现在在做什么

我编写了一个远程应用程序,我想将 .wmv 文件从一台机器传输到另一台机器,我想拆分 .wmv 并将其发送到远程机器并在那里使用它。如果我尝试发送完整文件意味着它会占用很多看起来很糟糕的内存。所以我想拆分它并发送它。但是文件没有被播放它引发了一个不支持格式的异常。

以下是我刚刚在本地机器上完成的代码(不是远程处理):

try
        {
            FileStream fswrite = new FileStream("D:\\Movie.wmv", FileMode.Create);
            int pointer = 1;
            int bufferlength = 12488;
            int RemainingLen = 0;
            int AppLen = 0;
            FileStream fst = new FileStream("E:\\Movie.wmv", FileMode.Open);
            int TotalLen = (int)fst.Length;
            fst.Close();
            while (pointer != 0)
            {
                byte[] svid = new byte[bufferlength];
                using (FileStream fst1 = new FileStream("E:\\Movie.wmv", FileMode.Open))
                {
                    pointer = fst1.Read(svid, AppLen, bufferlength);                        
                    fst1.Close();                   
                }  
                fswrite.Write(svid, 0, pointer);   
                AppLen += bufferlength;
                RemainingLen = TotalLen-AppLen;
                if(RemainingLen < bufferlength)
                {
                    byte[] svid1 = new byte[RemainingLen];
                    using (FileStream fst2 = new FileStream("E:\\Movie.wmv", FileMode.Open))
                    {                      
                        pointer = fst2.Read(svid1, 0, RemainingLen);
                        fst2.Close();                   
                    } 
                    fswrite.Write(svid, 0, pointer);   
                    break;
                }

            }

            fswrite.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

【问题讨论】:

  • 请解释您拆分文件的过程,以及您收到的错误消息。考虑只拆分文件并在本地运行它。尽可能多地分解问题总是一个好主意,因此您在任何一个时间点要解决的问题都尽可能易于管理。
  • 你不能把一个 wmv 切成两半。你需要找到一个可以对 wmvs 进行操作的库,并使用它来拆分它。
  • 请注意:“标志/需要版主注意”是针对管理问题 - 不是为了寻求答案。
  • 至少格式化代码大括号内的代码。

标签: c#


【解决方案1】:

您可能会发现Good way to send a large file over a network in C# 很有帮助。

【讨论】:

    【解决方案2】:

    我将假设您在发送文件时拆分文件,而不是尝试将 wmv 放在远程机器上的 3 个不同文件中。

    当您发送文件时,您的基本操作是:
    本地机器
    1) 读取 16k 字节(或您喜欢的任何数字)
    2) 通过网络发送这 16k 字节
    3) 重复上述步骤直到完成

    远程机器
    1) 监听连接
    2) 获取 16k 字节
    3) 写入 16k 字节
    4) 重复直到完成。

    这种方法会起作用,但是你又在发明轮子,我建议使用像 File.Copy 这样简单的东西(在网络上可以正常工作),或者如果这不能满足您的需求,也许使用 FTP 客户端/服务器解决方案(网络上有大量 C# 示例可以托管在您的应用程序中)。

    【讨论】:

    • 那么您的代码中存在错误。如果您希望我们查看,您必须发布代码
    【解决方案3】:

    我试过了

     private void Splitinthread()
        {
            int bufferlength = 2048;
            int pointer = 1;
            int offset = 0;
            int length = 0;
            byte[] buff = new byte[2048];
            FileStream fstwrite = new FileStream("D:\\TEST.wmv", FileMode.Create);
            FileStream fst2 = new FileStream("E:\\karthi.wmv", FileMode.Open);
            int Tot_Len = (int)fst2.Length;
            int Remain_Buff = 0;
            //Stream fst = File.OpenRead("E:\\karth.wmv");
    
            while (pointer != 0)
            {
                try
                {
    
                    fst2.Read(buff, 0, bufferlength);
                    fstwrite.Write(buff, 0, bufferlength);
                    offset += bufferlength;
                    Remain_Buff = Tot_Len - offset;
                    Fileprogress.Value = CalculateProgress(offset, Tot_Len);
                    if (Remain_Buff < bufferlength)
                    {
                        byte[] buff1 = new byte[Remain_Buff];
                        pointer = fst2.Read(buff1, 0, Remain_Buff);
                        fstwrite.Write(buff1, 0, pointer);
                        Fileprogress.Value = CalculateProgress(offset, Tot_Len);
                        fstwrite.Close();
                        fst2.Close();
                        break;
                    }
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            MessageBox.Show("Completed");
        }
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      相关资源
      最近更新 更多