vs2012自制的一个文件分割合并软件实例的一些问题,求教
visual吧
全部回复
仅看楼主
level 8
自制,然后出现一系列问题。比如word文档分割后变成乱码,合并是提示找不到原文件路径或者是路径不正确。。。。
求教
2014年05月28日 15点05分 1
level 8
啊……木有大神帮忙呢
——我飘落向天空,你说你会等我
2014年05月30日 19点05分 2
level 5
(*∩_∩*)
2014年06月01日 12点06分 3
level 5
Word的分割肯定和txt不一样,Word是有格式的。
2014年06月01日 12点06分 4
level 8
namespace 文件分割合并软件
{
public partial class MainForm : Form
{
string srcSplFilename = null; //记录源文件的存储路径
string desSplFilename = null; //记录目的文件的存储路径
string srcMerFilename = null;
string desMerFilename = null;
string fileName = "";
string fileExtra = "";
public MainForm()
{
InitializeComponent();
}
private void btnSource_Click(object sender, EventArgs e)
{
OpenFileDialog openDlg = new OpenFileDialog();
if (openDlg.ShowDialog() == DialogResult.OK && openDlg.FileName != string.Empty)
{
srcSplFilename = openDlg.FileName; //记录源文件的存储路径
txtSourceDir.Text = srcSplFilename; //将源文件的存储路径显示在文本框中
}
}
2014年06月01日 15点06分 5
level 8
private void btnDes_Click(object sender, EventArgs e)
{
//创建FolderBrowserDialog对话框实例
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
folderDlg.Description = "请选择目的文件存放的文件夹";
if (folderDlg.ShowDialog() == DialogResult.OK)
{
//使用FolderBrowserDialog对话框的SelectedPath属性获取用户选择的目的文件存储路径
desSplFilename = folderDlg.SelectedPath;
txtDesDir.Text = desSplFilename; //江民目的文件的存储路径显示在文本框中
}
else MessageBox.Show("您没有选择目录");
}
2014年06月01日 15点06分 6
level 8
private void btnOK_Click(object sender, EventArgs e)
{
int desFileSize = 0;
int desFileCount = 0;
byte[] buffer;
string[] desExtra;
string filename;
FileStream splitFileStream = null;
BinaryReader splitFileReader = null;
FileStream desFileStream = null;
BinaryWriter desBinaryWriter = null;
try
{
//以源文件路径对应的字符串和Open文件打开模式初始化FileStream文件流实例
splitFileStream = new FileStream(srcSplFilename, FileMode.Open);
//以FileStream文件流来初始化BinaryReader文件流实例
splitFileReader = new BinaryReader(splitFileStream);
//获取分割后所得到的小文件的总数
desFileSize = int.Parse(cboSize.SelectedItem.ToString()) * 1024 ;
desFileCount = (int)(splitFileStream.Length / desFileSize);
if (splitFileStream.Length % desFileSize != 0)
desFileCount++;
//数组desExtra的最后一个元素为源文件的扩展名,也即新文件扩展名
desExtra = srcSplFilename.Split('.');
//获取源文件的文件名
filename = srcSplFilename.Substring(srcSplFilename.LastIndexOf("\\") + 1, srcSplFilename.LastIndexOf(".") - (srcSplFilename.LastIndexOf("\\") + 1));
//设置进度条空间的Maximum属性
progBarSplit.Maximum = desFileCount - 1;
//循环处理,依次将大文件分割成多个小文件
for (int i = 1; i <= desFileCount; i++)
{
//确定小文件的文件名称
string desFileName = @desSplFilename + @"\" + filename + i.ToString().PadLeft(4, '0') + "." + desExtra[desExtra.Length - 1];
//根据目的文件名称和文件打开模式来初始化FileStream文件流实例
desFileStream = new FileStream(desFileName, FileMode.OpenOrCreate);
//以FileStream实例创建并初始化BinaryWriter文件流实例
desBinaryWriter = new BinaryWriter(desFileStream);
//从源文件中读取指定大小数据
buffer = splitFileReader.ReadBytes(desFileSize);
//把读取的数据写入分割后的小文件中
desBinaryWriter.Write(buffer);
//关闭相应目的文件流实例
desBinaryWriter.Close();
desFileStream.Close();
progBarSplit.Value = i - 1;
}
//关闭源文件流实例
splitFileReader.Close();
splitFileStream.Close();
MessageBox.Show("分割成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
//确保各文件流实例关闭,资源释放
if (desBinaryWriter != null)
desBinaryWriter.Close();
if (desFileStream != null)
desFileStream.Close();
if (splitFileReader != null)
splitFileReader.Close();
if (splitFileStream != null)
splitFileStream.Close();
txtSourceDir.Clear();
txtDesDir.Clear();
txtSourceDir.Focus();
desSplFilename = null;
srcSplFilename = null;
cboSize.SelectedIndex = 0;
progBarSplit.Value = 0;
}
}
private void btnMergSrc_Click(object sender, EventArgs e)
{
string[] srcPath;
string[] filename;
string strTemp = "";
int i = 0;
OpenFileDialog openDlg = new OpenFileDialog();
openDlg.Title = "请选择要合并的第一个文件";
if (openDlg.ShowDialog() == DialogResult.OK && openDlg.FileName != "")
{
txtMerSrc.Text = openDlg.FileName;
}
srcPath=openDlg.FileName.Split(@"\".ToCharArray());
for (i = 0; i < srcPath.Length - 1; i++)
{
strTemp = strTemp + srcPath[i] + @".";
}
srcMerFilename = strTemp; //获取文件所在目录
filename = srcPath[srcPath.Length - 1].Split(@".".ToCharArray());
for (i = 0; i < filename.Length - 1; i++)
{
fileName = fileName + filename[i] + @".";
}
fileName = fileName.Substring(0,fileName.Length - 1); //获得文件名
fileExtra = filename[filename.Length - 1]; //获得文件扩展
}
private void btnMergDes_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
folderDlg.Description = "请选择目的文件存放的文件夹";
if (folderDlg.ShowDialog() == DialogResult.OK)
{
desMerFilename = folderDlg.SelectedPath;
txtMergDes.Text = desMerFilename;
}
else MessageBox.Show("你没有选择目录");
}
2014年06月01日 15点06分 7
level 8
private void btnMerge_Click(object sender, EventArgs e)
{
string filename = "";
string[] arrFileNames; //记录所有分割后得到的所有小文件的名称
int iFileCount = 0; //记录小文件的个数
FileStream desMergeStream = null;
BinaryWriter desMergeBinaryWriter = null;
FileStream srcStream = null;
BinaryReader srcReader = null;
try
{
filename = fileName + "*." + fileExtra; //得到所有需合并的小文件的名称
//使用GetFiles方法获取小文件所在目录中所有需合并的小文件
arrFileNames = Directory.GetFiles(srcMerFilename, filename);
iFileCount = arrFileNames.Length;
//获得合并后的文件名(删去小文件名尾部的编号)
filename = fileName.Substring(0, fileName.Length - 4);
progBarMerge.Maximum = iFileCount;
//以合并后的文件名称和打开方式来创建并初始化FileStream文件流
desMergeStream = new FileStream(txtMergDes.Text + "\\" + filename + "." + fileExtra, FileMode.OpenOrCreate);
//以FileStream文件流来初始化BinaryWriter文件流,用以合并分割的文件
desMergeBinaryWriter = new BinaryWriter(desMergeStream);
//循环合并小文件,并生成合并文件
for (int i = 0; i < iFileCount; i++)
{
//以小文件所对应的文件名称和打开模式来初始化FileStream文件流
srcStream = new FileStream(arrFileNames[i], FileMode.Open);
//用FileStream文件流来初始化BinaryReader文件流,读取分割后的小文件
srcReader = new BinaryReader(srcStream);
//读取分割文件中的数据,并生成合并后文件
desMergeBinaryWriter.Write(srcReader.ReadBytes((int)srcStream.Length));
srcReader.Close(); //关闭BinaryReader文件流
srcStream.Close(); //关闭FileStream文件流
progBarMerge.Value = i + 1; //显示合并进程
}
desMergeBinaryWriter.Close(); //关闭BinaryWriter文件书写器
desMergeStream.Close(); //关闭FileStream文件流
MessageBox.Show("成功合并!");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
if (desMergeStream != null)
desMergeStream.Close();
if (desMergeBinaryWriter != null)
desMergeBinaryWriter.Close();
if (srcStream != null)
srcStream.Close();
if (srcReader != null)
srcReader.Close();
txtMerSrc.Clear();
txtMergDes.Clear();
srcMerFilename = null;
desMerFilename = null;
fileName = "";
fileExtra = "";
progBarMerge.Value = 0;
}
}
}
}
2014年06月01日 15点06分 8
level 8
源码什么的好尴尬。。。这个当真是麻烦了,好心人如果闲的话看看。。。看的头晕。。。不用麻烦大家了还是。。。
——我飘落向天空,你说你会等我
2014年06月01日 15点06分 9
level 6
你好,可以把你的visual studio 2012安装包发给我用用吗?谢谢你了哦。
2014年06月04日 07点06分 10
level 8
我直接在官网下的呀……我也没有激活码什么的东西啊……
2014年06月04日 07点06分 11
level 1
lz 有问题请教你
2014年06月11日 16点06分 12
level 1
lz 有问题请教你啊
2014年06月11日 16点06分 13
什么呀?
2014年06月12日 03点06分
回复 羽天使之翼 :QQ号多少,问你要个文件,私聊 谢谢
2014年06月12日 04点06分
回复 love春天的豆子 :私信
2014年06月12日 04点06分
回复 love春天的豆子 :我看有没有
2014年06月12日 04点06分
level 1
请问楼主找出错了没有啊。我也想问这个呢!
2015年06月11日 14点06分 14
1