karthik
karthik

Reputation: 4735

how to split a wmv file

im doing a application in which i split a wmv file and transfer it to otherlocation(in 'x' kbs) .after the transfer gets completed the file doesnt play,it gives a message as the format is not supported.is there anyother way to do it.

sory i will explain what im doing now

i wrote an remote application,i want to transfer a .wmv file from one machine to other,i want to split the .wmv and send it to the remote machine and use it there.if i try to send the complete file means it will take lot of memory that seems very bad.so i want to split it and send it.but the file doesnt gets played it raises an exception the format is not supported.

the following is the code im doing i just done it in the local machine itself(not remoting):

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);
        }

Upvotes: 0

Views: 943

Answers (3)

karthik
karthik

Reputation: 4735

i tried this

 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");
    }

Upvotes: 0

Brian
Brian

Reputation: 25834

You'll probably find Good way to send a large file over a network in C# helpful.

Upvotes: 2

EKS
EKS

Reputation: 5623

Im going to make the assumtion your spliting the file when your sending it, and not trying to have the wmv in 3 different files on the remote machine.

When your sending the file what you basicly do is this:
Local machine
1) Read 16k bytes ( Or whatever number you prefere )
2) Send those 16k bytes over the network
3) Repeat above steps untill done

Remote machine
1) Listen for a connection
2) Get 16k bytes
3) Write 16k bytes
4) Repeat untill done.

This method will work, but your kind of inventing the wheel again, i would recommend using either something as simple as File.Copy ( Works fine over the network ) or if that does not meet your needs perhaps using a FTP client / server solution ( Plenty of C# examples on the net that can be hosted inside your application ).

Upvotes: 1

Related Questions