文件分割器(c#版)

之前看同学用c#写了个文本分割器,我忘了是文本还是文件了,反正他的实现只是能分割文本文件而已。方法是读取文本文档的内容,然后按照字数分割成多少段。一解释就觉得简单了吧~~~

马上就要交星火杯的作品了,我们院的要求是星火杯必须通过院审,而我最近一直在弄国创的项目,所以没时间顾及这个星火杯。想来想去,还是交一个吧,反正没指望获奖,通过院审就好了。于是就决定写一个文件分割器,看好了,是文件分割。就是说对所有类型的文件都能分割和合成的。

其实我也是刚接触c#没多久,最初对c#有兴趣还是单纯的因为它能很方便的写出图形界面的程序来^^ 这个程序没有涉及什么高深的东西,都是些简单的应用,但是这些东西也让我查了好半天啊,不过这样就印象深刻了,嘿嘿~ 先截个图

 

在这里就说说几个点吧,其余的都用不着说的

第一:就是文本框的输入只能输入数字

用到了textbox的KeyPress事件,我这里只允许textbox接收0~9的数字和退格键。

if (e.KeyChar >= '0' && e.KeyChar <= '9'||e.KeyChar=='\b')
                e.Handled = false;
            else
                e.Handled = true;

第二:对于文件的打开和保存,就用OpenFileDialog和SaveFileDialog类就可以。很方便很强大

第三:本程序的核心——分割和合并

分割文件

try
            {

//src是源文件的路径
                FileStream InFile = new FileStream(src.Text, FileMode.OpenOrCreate, FileAccess.Read);
                FileInfo f = new FileInfo(src.Text);

                //根据扩展名字符数的不同来截取,f.Extension是该文件的扩展名
                if(f.Extension.Length==3)
                    str = src.Text.Substring(src.Text.Length - 3, 3);
                else if(f.Extension.Length==4)
                    str = src.Text.Substring(src.Text.Length - 4 ,4);
                else if(f.Extension.Length==5)
                    str = src.Text.Substring(src.Text.Length - 5, 5);

//blocknum是块数量,dest是保存路径
                for (int i = 0; i < Int32.Parse(blocknum.Text); i++)
                {
                    FileStream OutFile = new FileStream(dest.Text + i + str, FileMode.OpenOrCreate, FileAccess.Write);
                    int data = 0;
                    int FileSize = Convert.ToInt32(blocksize.Text)+1;    //这里加个1,否则向下取整会导致丢失字节
                    byte[] buffer = new byte[FileSize];
                    if ((data = InFile.Read(buffer, 0, FileSize)) > 0)
                        OutFile.Write(buffer, 0, data);
                    OutFile.Close();
                }
                InFile.Close();
                MessageBox.Show("切割文件完成!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception exc)
            {
                MessageBox.Show("切割文件发生错误:"+exc.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }

 

合并文件:

先截个图

try
            {

//SaveFileName是保存路径,FirstFileName是第一个文件的路径
                string FileName = "";
                FileInfo f = new FileInfo(FirstFileName.Text);
                if (f.Extension.Length == 3)
                {
                    str = src.Text.Substring(src.Text.Length - 3, 3);
                    FileName = FirstFileName.Text.Substring(0, FirstFileName.Text.Length - 4);
                }
                else if (f.Extension.Length == 4)
                {
                    str = src.Text.Substring(src.Text.Length - 4, 4);
                    FileName = FirstFileName.Text.Substring(0, FirstFileName.Text.Length - 5);
                }
                else if (f.Extension.Length == 5)
                {
                    str = src.Text.Substring(src.Text.Length - 5, 5);
                    FileName = FirstFileName.Text.Substring(0, FirstFileName.Text.Length - 6);
                }

                 FileStream OutFile = new FileStream(SaveFileName.Text+str, FileMode.OpenOrCreate, FileAccess.Write);       //这里的第一个参数开始没有加上str,结果导致每次保存文件都得手动的输入后缀名
                for (int i = 0; i < Int32.Parse(blocknum2.Text); i++)
                {
                    int data = 0;
                    byte[] buffer = new byte[1024];
                    FileStream InFile = new FileStream(FileName + i +str,FileMode.OpenOrCreate, FileAccess.Read);
                    while ((data = InFile.Read(buffer, 0, 1024)) > 0)
                    {
                        OutFile.Write(buffer, 0, data);
                    }
                    InFile.Close();
                }
                OutFile.Close();
                MessageBox.Show("合并文件完成!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception exc)
            {
                MessageBox.Show("组合文件发生错误:" + exc.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

恩 最后,能在分割和合间并来回切换的那个控件是TabControl。

本人是个菜鸟嘛,所以写这个程序的时间有点长,边查边写的也用了一下午时间了。其实有个地方浪费了好长时间,就是对扩展名处理的那个地方。不同的扩展名有不同的长度,这个很好想到。但是乱就乱在分割的文件名后面都加了一个“i”对应的数字,于是当我合并的时候,乱七八糟的东西就出现了。因为多了个“i”,所以文件名对不上了,让我头疼了半天。不过最终总算是找到原因啦~~

还是那句话,请大家多多指教!!!

你可能感兴趣的:(.net,C#,职场,文件分割,休闲)