////////////////////////////////////////////
//
// module: 核心模块状
// date : 24/03/2005
// copyright: 1.0
// author: 晏丹强
////////////////////////////////////////////
#include<windows.h>
#include<string.h>
#include<shellapi.h>
#include<shlobj.h>
#include"tool.h"
#include"resource.h"
HWND hwndprocess;
bool lsroot(LPCTSTR lpszPath)//////////确定是否是根目录
{
TCHAR szRoot[4];
wsprintf(szRoot,"%c:\\\0",lpszPath[0]);
return (lstrcmp(szRoot,lpszPath)==0);
}
LPTSTR DoOpenDir(HWND hwnd)///////打开目录对话框架
{
static char tempdir[256]="c:";
LPMALLOC lpMalloc;
LPTSTR tt=tempdir;
if(SHGetMalloc(&lpMalloc)!=NOERROR)
{
MessageBox(0,"初始化失败","error",0);
return tt=NULL;
}
BROWSEINFO brow;
memset(&brow,0,sizeof(brow));
brow.hwndOwner=hwnd;
brow.pidlRoot=NULL;
brow.pszDisplayName=tempdir;
brow.ulFlags=BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
brow.lpfn=NULL;
brow.lParam=0;
LPITEMIDLIST lpItem;
if((lpItem=::SHBrowseForFolder(&brow))!=NULL)
{
if(SHGetPathFromIDList(lpItem,tt))
return tt;
else MessageBox(0,"打开目录失败","error",0);
lpMalloc->Free(lpItem);
lpMalloc->Release ();
}
return tt=NULL;
}
LPTSTR OpenFindFile(HWND hwnd,BOOL jorc)///////////打开文件对话框
{
OPENFILENAME File;
static char filepath[256]="ydq";
LPTSTR tempdir=filepath;
ZeroMemory(&File,sizeof(File));
File.lStructSize=sizeof(File);
File.Flags=OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
File.hwndOwner=hwnd;
if(jorc==TRUE)///判断是打开目录还是文件
File.lpstrFilter="All Files (*.*)\0*.*\0";
else
File.lpstrFilter="All Files (*.join)\0*.join\0";
File.nFilterIndex=1;
File.lpstrFile=filepath;
File.nMaxFile=sizeof(filepath);
if(GetOpenFileName(&File))
{
return tempdir;
}
else
return tempdir=NULL;
}
/////////////////////分割文件涵数
void Split(LPTSTR filename,LPTSTR SavePath,DWORD SplitByte)
{
HANDLE handle;
DWORD dw,bytedw,filesize;
FILEINFO fileinfo;
DWORD backbyte;
int SplitNum;
int i,len;
static BYTE *lpdata,*data;
char temppath[256];
char tempnum[2];
/////////////////////////////////////////////////////////
handle=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,
0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if(handle==INVALID_HANDLE_VALUE)
{
MessageBox(0,"打开文件错误","split",0);
return ;
}
filesize=GetFileSize(handle,&bytedw);
SplitNum=filesize/SplitByte;///求得分割数量
backbyte=filesize%SplitByte;///剩余字节
lpdata=data=new BYTE[filesize];
if(lpdata==NULL)MessageBox(0,"申请空间失败","split",0);
ReadFile(handle,lpdata,filesize,&dw,0);
CloseHandle(handle);
if(filesize%SplitByte!=0)
SplitNum+=1;
//////////////////////////////////////循环写分割文件
for(i=0;i<SplitNum;i++)
{
strcpy(temppath,SavePath);
if(lsroot(SavePath)==0)
strcat(temppath,"\\part");
else
strcat(temppath,"part");
wsprintf(tempnum,"%d",i+1);
strcat(temppath,tempnum);
strcat(temppath,".dat");
if(i==SplitNum-1&&filesize%SplitByte!=0)
{
handle=CreateFile(temppath,GENERIC_WRITE,FILE_SHARE_READ|
FILE_SHARE_WRITE,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
WriteFile(handle,data,backbyte,&dw,0);
CloseHandle(handle);
}
else
{
handle=CreateFile(temppath,GENERIC_WRITE,FILE_SHARE_READ,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
WriteFile(handle,data,SplitByte,&dw,0);
CloseHandle(handle);
data+=SplitByte;
}
}
////////////写文件信息
len=strlen(filename);
for( i=len;i>0;i--)
{
if(filename[i]=='\\')
break;
}
filename+=i+1;
strcpy(fileinfo.ResouFileName,filename);
fileinfo.TotalByte =filesize;
fileinfo.FileNum =SplitNum;
dw=sizeof(FILEINFO);
if(lsroot(SavePath)==0)
strcat(SavePath,"\\");
strcat(filename,".join");
strcat(SavePath,filename);
handle=CreateFile(SavePath,GENERIC_WRITE,FILE_SHARE_READ|
FILE_SHARE_WRITE,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
WriteFile(handle,&fileinfo,sizeof(FILEINFO),&dw,0);
CloseHandle(handle);
delete []lpdata;
lpdata=NULL;
MessageBox(0,"分割完成","split",0);
}
//////////////////////////////合并文件涵数
void Join(LPTSTR filename,LPTSTR savepath)
{
HANDLE handle;
DWORD dw;
DWORD filesize;
DWORD TotalSize;
LPTSTR templp=filename;
FILEINFO file;
BYTE *lpdata,*data,*joindata;
int j,filenum,num;
int filestrlen;
char resname[256]={0};
char pathtemp[10]="part";
char numchar[2];
char temppath[256]={0};
handle=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ|
FILE_SHARE_WRITE,
0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
ReadFile(handle,(FILEINFO*)&file,sizeof(FILEINFO),&dw,0);
filenum=file.FileNum ;
strcpy(resname,file.ResouFileName);
TotalSize=file.TotalByte;
filestrlen=strlen(filename);
strcpy(temppath,filename);
lpdata=data=new BYTE[TotalSize];
if(lpdata==NULL)MessageBox(0,"申请空间出错","split",0);
CloseHandle(handle);
////////////////////////////////////////////////////////
for(;filestrlen>0;filestrlen--)
if(filename[filestrlen]=='\\')
break;
filestrlen+=1;///获得文件的文件名
filename+=filestrlen;
for(j=0;j<filenum;j++)
{
strcpy(filename,pathtemp);
wsprintf(numchar,"%d",j+1);
strcat(filename,numchar);
strcat(filename,".dat");
handle=CreateFile(templp,GENERIC_READ,FILE_SHARE_READ,
0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
filesize=GetFileSize(handle,&dw);
joindata=new BYTE[filesize];
if(joindata==NULL)MessageBox(0,"申请空间出错","split",0);
ReadFile(handle,joindata,filesize,&dw,0);
memcpy(data,joindata,filesize);
////////////////连接内存数据
data+=filesize;
CloseHandle(handle);
delete []joindata;
}
if(!lsroot(savepath))
strcat(savepath,"\\");
strcat(savepath,resname);
handle=CreateFile(savepath,GENERIC_WRITE,FILE_SHARE_READ,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
WriteFile(handle,lpdata,TotalSize,&dw,0);
delete []lpdata;
lpdata=NULL;
CloseHandle(handle);
MessageBox(0,"合并文件成功","split",0);
}
商业编程-源码-文件分割代码.zip
版权申诉
58 浏览量
2022-06-23
19:16:23
上传
评论
收藏 11KB ZIP 举报
programxh
- 粉丝: 17
- 资源: 1万+
最新资源
- Windows系统下安装与配置Neo4j的步骤
- 基于matlab实现潮流计算和最优潮流计算的程序1,对毕业设计有一定用处.rar
- 基于大数据学习资源推荐系统的设计与实现(部署视频)-kaic.mp4
- 哈工大形式语言和自动机2022期末含答案
- Windows系统下安装与配置Neo4j的步骤
- 哈希算法(Hash Algorithm)是一种将任意长度的二进制数据映射为较短的、固定长度的二进制值的函数.txt
- Windows系统下安装与配置Neo4j的步骤
- 在二叉树或更复杂的树形结构中,先序输出叶结点.txt
- 列出所有祖先结点的概念通常与树形结构或图论中的节点相关.txt
- 基于matlab实现潮流计算程序,MATLAB潮流计算程序.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈