`
yidongkaifa
  • 浏览: 4059451 次
文章分类
社区版块
存档分类
最新评论

发送文件夹的方法(VC)

 
阅读更多

发送文件夹有很多方法,但是网上的代码很少,VC只有飞鸽有源代码,但是它采用的API的编程模式,不容易理解,加之注释又是日文或英文的,这样理解起来就更困难些.

有很多人在网上发帖子询问如何发送文件夹,有人回答:用Winraar压缩再传,说实话是个方法,但是是个很无聊的方法.还有人说先遍历文件,发现是目录就叫对方建立一个.这个也是个方法,但是有些复杂,尤其是目录又深又多,难免出错.

我要给大家介绍的方法是:

1.先传把文件目录和文件名都传过去;

2.处理文件目录以便建立.

3.传输文件夹.

首先,我们先定义一个结构体

struct FOLDERINFO

{

int fileLength; //记录文件长度

char fileName[128]; //记录文件名

char filePath[512] //记录文件路径

};

这里需要说明一下,为什么文件名,文件路径不用CString定义,原因是这个结构体我们要发给对方的,但是由于CString长度是不丁长的,导致结构体长度不能确定,从而使程序出错.

下面就是发送方的代码,我已经省去了目录选择和遍历目录的代码:

void CMyQQDlg::SendFiles()
{
CSocket sockClient;
sockClient.Create(); //创建Socket
CString ip;
m_You_IP.GetWindowText(ip); //m_You_IP是IP控件的变量
sockClient.Connect(ip, 11024); //
///////////////////////////////////////////////////////////////////

CString fileName; ///////////////////////这是发送方处理目录的代码,如果没有这段代码
fileName=m_fileName; //将只能发送根目录下的文件:)
int a=fileName.Find(filepathone);
if(a!=2)
{
fileName=fileName.Right(fileName.GetLength()-a-1);
fileName="C:\\"+fileName;
}
////////////////////////////////////////////////////////////////////////////
CFile myFile;
FOLDERINFO myFileInfo;
if(!myFile.Open(m_fileName,CFile::modeRead|CFile::typeBinary))//m_fileName是遍历后得到的文件

return ;
myFileInfo.fileLength=myFile.GetLength(); //得到文件大小
strcpy(myFileInfo.fileName,myFile.GetFileName()); //得到文件名称
strcpy(myFileInfo.filePath,m_fileName);
sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息


myFile.Seek(0,CFile::begin);
char m_buf[SIZEFILE]={0}; //缓冲区
CString strError;
int num=0;
int temp=0;

//开始发送
for(;;)
{
num=myFile.Read(m_buf, SIZEFILE);
if(num==0) break;
end=sockClient.Send(m_buf, num);
temp+=end;
}



myFile.Close();
sockClient.Close();
return ;
}

下面就是接收方的代码:

int CMyQQDlg::SaveYouFiles(CSocket &recSo, SOCKADDR_IN &client)
{
CString fnames;
CString filenamepath;
static int filescount=0;
CString strfileIp,strfileName,strfileLength;
char filemes[512]={0};//存文件名字的
int fileLengths=0;
FOLDERINFO myFileInfo;
recSo.Receive(&myFileInfo,sizeof(FOLDERINFO));
fileLengths=myFileInfo.fileLength;
strfileIp.Format(inet_ntoa(client.sin_addr));
strfileName.Format(myFileInfo.fileName); //得到文件名字
strfileLength.Format("%f",myFileInfo.fileLength/1024.0);
filenamepath.Format(myFileInfo.filePath); //得到文件路径

int a=filenamepath.ReverseFind(_T('\\'));//这5行代码是用来得到一个例如:\AMD\Intel\ATI\
filenamepath=filenamepath.Left(a+1); //主要是用来建立目录
CString b=filenamepath;
a=b.ReverseFind(_T(':'));
b=b.Right(b.GetLength()-a-1);

filenamepath="files"+b; //所有的文件都存在files文件夹下

CreateDirectory(filenamepath,NULL); //创建目录
strcpy(filemes,filenamepath+strfileName);

char bufs[SIZEFILE]={0}; //缓冲SIZEFILE=1024
CFile fs(filemes,CFile::modeCreate|CFile::modeWrite); //存文件
int n=0; //接受的字节数 0表示结束
int temp=0;

//开始接收
for(;;)
{
n=recSo.Receive(bufs,SIZEFILE); //接受
if(n==0) //0表示结束
break; //接受完毕
fs.Write(bufs,n);
// fputs(bufs,fp);
temp+=n;
}

fs.Close();
return 0;
}


转载自:http://hi.baidu.com/eagle200901/blog/item/e4438a46b01ce58cb2b7dcb3.html

分享到:
评论

相关推荐

    发送文件夹socket方法.rar_afternoonmxf_socket_socket 文件夹_socket多文件_文件夹传输

    发送文件夹有很多方法,但是网上的代码很少,VC只有飞鸽有源代码,但是它采用的API的编程模式,不容易理解,加之注释又是日文或英文的,这样理解起来就更困难些. 有很多人在网上发帖子询问如何发送文件夹,有人回答:用...

    单片机串口发送数据至VC接收显示及保存

    单片机通过串口发送float型数据至VC,在VC上显示出数据,并可以保存在当前文件夹的txt文档中。

    VC调用outlook发送邮件,文件复制移动压缩解压等

    VC调用outlook实现自动发送邮件,实现文件的复制移动,文件夹的压缩和解压,使用MFC实现,多种压缩方法,有zlib压缩,有调用好压命令行进行压缩方法,需要什么样的可进行对注释的代码部分去掉注释即可。

    VC串口通信源程序

    系统要求:WIN9X/ME/NT/2000 VC++6.0 且安装了VC ...如何建立工程:建立新文件夹,将文档用WINZIP解压后,双击 Scommtest.dsw 即可在VC6.0中打开工程文件。作者主页上有详细编程说明,每一步都列出来了,可以参考。

    VC FTP文件上传下载程序.rar

    VC FTP文件上传下载程序,利用FTP协议上传文件、下载文件的一个程序实例,主窗口采用左右框架的模式,左侧显示本地文件、右侧显示远程文件,同时可操作本地视图中的上一层、下一层目录,可选中指定文件上传下载,也...

    VC ChatRoom聊天室(客户端 服务端).rar

    VC 聊天室(客户端 服务端),CS架构的ChatRoom聊天源码,服务端用来创建公共的聊天服务,比如创建用户列表、显示聊天消息、监控用户数量和在线人数;客户端是提供给用户使用的真正聊天程序,可完成大部分的聊天操作,...

    VC socket(网络编程)文件图片等传送(下)

    网络编程(socket)文件图片等传送 网络编程(socket)文件图片等传送 网络编程(socket)文件图片等传送 这个文档是(上)(下)两个一起的。。。。。。。

    VC API常用函数简单例子大全.doc

    VC API常用函数简单例子大全第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄 4 第二个:SendMessage根据窗口句柄发送一个消息给窗口 4 第三个:GetCursorPos获取鼠标当前位置(屏幕) 6 第四个:...

    C++实现的TCP协议的文件传输

    用C++实现的TCP协议的文件传输代码,代码简单明了,即下即用

    vc++ 应用源码包_6

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++usb 编程(接收与发送数据)

    四个文件夹和一个说明文档,包括testusb,usb,usbport usbview这四个文件夹,本人运行过是可用的。

    Kuntroller:用于从操纵杆、MIDI、OSC 捕获/发送数据的应用程序-开源

    ## 在 Windows 中安装: * 转到 install-win 文件夹 * 安装 vc-redist 以运行。 * 安装 Tobias Erichsen 的 loopMIDI 以创建虚拟 MIDI 端口。 * 现在您可以运行该应用程序。 虚拟 MIDI 端口 (midiout_dev = virtual...

    易语言-libcurl 7.66 源码 附上Vc

    版本使用了7.66 没有用...7.66.rar (3591 K) 下载次数:67项目在 projects\Windows 文件夹里我使用的是 Vc14(VS2015),Vc14-是原始未修改的Vc10(VS2010,生成的文件更小),也是修改的,可以用,Vc10-是原始未修改的

    邮件发送ASP组件和饼图ActiveX控件VC源代码(更新版本)

    本组件实现了五个COM对象:一:COM组件,实现了BASE64加解密,发送邮件,以给定分隔字符把字符串转换成数组,钩子安装,设置IIS默认站点的主目录,拷贝文件夹,删除文件夹,创建多级目录,以给定日期计算星期几,得到内存...

    Gloox1.0 封装

    一、对Gloox1.0添加了操作接口(.def),实现收发信息,可以发送中文。 二、开发环境:VC2008、Openfire、WinXP。 说明: 1、此代码是项目中正在使用的代码,如有不妥请指教。 2、工程中使用的是绝对路径,请在...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_2

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_3

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    vc++ 应用源码包_5

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    迅鸽C++_V1.0

    用VC实现的局域网消息、文件、文件夹网络传输等功能的通信。 好久不使用VC6.0了,想捡回些东西,所以模仿飞鸽写了这个小软件。 主要采用CSocket实现,多线程的发送、接收文件等,时间短暂没有实现发送暂停、断点续传...

Global site tag (gtag.js) - Google Analytics