我正在做一个应用程序,其中我拆分wmv文件并将其转移到otherlocation(在'x'kbs)。转移完成后文件不播放,它给出一条消息,因为格式不受支持。在那里另一种方法。
sory我会解释我现在在做什么
我写了一个远程应用程序,我想将.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);
}
答案 0 :(得分:2)
答案 1 :(得分:1)
我会在发送文件时将您的文件拆分,而不是尝试将wmv放在远程计算机上的3个不同文件中。
当您发送文件时,您基本上做的是:
本地机器
1)读取16k字节(或者您喜欢的任何数字)
2)通过网络发送这些16k字节
3)重复上述步骤,直至完成
远程计算机
1)听取连接
2)获得16k字节
3)写入16k字节
4)重复直到完成。
这种方法可以工作,但你再次发明轮子,我建议使用像File.Copy这样简单的东西(在网络上正常工作),或者如果不能满足你的需求,或许使用FTP客户端/服务器解决方案(网上有很多可以在你的应用程序中托管的C#例子。
答案 2 :(得分:0)
我试过这个
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");
}