之前看同学用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”,所以文件名对不上了,让我头疼了半天。不过最终总算是找到原因啦~~
还是那句话,请大家多多指教!!!