xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 新闻动态 2019-10-05 19:05 的文章
当前位置: 新濠国际登录平台 > 新闻动态 > 正文

首先建立一个基于对话框的MFC工程

//简易ftp客户端
#include <stdio.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <pthread.h>

#include <sys/stat.h>

#include <fcntl.h>

typedef struct sockaddr* sockaddrp;

//命令传输

int sockfd;

//数据传输

int sockfd1;

char buf[4096] = {};

//地址

char buf1[4096] = {};

//帐号、密码

char buf2[4096] = {};

//存放命令名

char tem1[255] = {};

//存放文件名

char tem2[255] = {};

struct sockaddr_in new_addr = {AF_INET};

void func()

{

 sprintf(buf,"PASVn");

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 int a[4];

    int b[2];

    printf("%sn",buf);

    sscanf(buf,"227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)",&a[0],&a[1],&a[2],&a[3],&b[0],&b[1]);

    int msg = b[0]*256+b[1];

 sockfd1 = socket(AF_INET,SOCK_STREAM,0);



 new_addr.sin_port = htons(msg);

 new_addr.sin_addr.s_addr = inet_addr("192.168.6.66");

 connect(sockfd1,(sockaddrp)&new_addr,sizeof(new_addr));

}

//目录

void ls_run()

{



 sprintf(buf,"LISTn"); 

 send(sockfd,buf,strlen(buf),0);



 bzero(buf,sizeof(buf));

 recv(sockfd1,buf,sizeof(buf),0);

 printf("server:%sn",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%sn",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%sn",buf);



}

//进入目录

void cd_run()

{

//-----------------------------------------------------



 sprintf(buf,"CWD %sn",tem2); 

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 sprintf(buf,"PWDn"); 

 send(sockfd,buf,strlen(buf),0);



 bzero(buf,sizeof(buf));

 recv(sockfd1,buf,sizeof(buf),0);

 printf("server1:%s",buf);



 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server2:%sn",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server3:%sn",buf);

 sprintf(buf1,"%s",buf);

 func(); 

//------------------------------------------------------- 

 sprintf(buf,"LISTn"); 

 send(sockfd,buf,strlen(buf),0);



 bzero(buf,sizeof(buf));

 recv(sockfd1,buf,sizeof(buf),0);

 printf("%s",buf);



 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server1:%sn",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server2:%sn",buf);



}

//下载

void get_run()

{

 func();

 sprintf(buf,"RETR %sn",tem2); 

 send(sockfd,buf,strlen(buf),0);

 printf("%s",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd1,buf,sizeof(buf),0);



 int tmp=sizeof(new_addr);

 int fd = open(tem2,O_WRONLY|O_CREAT|O_TRUNC,0644);



 write(fd,buf,strlen(buf));

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);



 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 close(fd);

}

//上传

void put_run()

{

 char inf[1024] = {};

 func();

 int fd = open(tem2,O_RDONLY);

 read(fd,inf,strlen(buf));

 close(fd);



 sprintf(buf,"STOR %sn",tem2); 

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);

 sprintf(buf,"%sn",inf); 

 send(sockfd1,buf,sizeof(buf),0);

 close(sockfd1);



 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);







}

//删除

void delete_run()

{

 func();

 sprintf(buf,"DELE %sn",tem2);

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);

//-------------------------------------------------



 sprintf(buf,"LISTn"); 

 send(sockfd,buf,strlen(buf),0);



 bzero(buf,sizeof(buf));

 recv(sockfd1,buf,sizeof(buf),0);

 printf("%s",buf);



 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server1:%sn",buf);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server2:%sn",buf);

}



//登陆

void login(void)

{



 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%s",buf);

//用户帐号输入

 printf("输入用户名:");

 gets(buf2);

 sprintf(buf,"%s %sn","USER",buf2);

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 //printf("server:%s",buf);

//用户密码输入

 printf("输入密码:");

 gets(buf2);

 sprintf(buf,"%s %sn","PASS",buf2);

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%s",buf);





 sprintf(buf,"SYSTn");

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%s",buf);

 sprintf(buf,"FEATn");

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("server:%s",buf);

 sprintf(buf,"OPTS UTF8 ONn");

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);

 sprintf(buf,"PWDn");

 send(sockfd,buf,strlen(buf),0);

 bzero(buf,sizeof(buf));

 recv(sockfd,buf,sizeof(buf),0);

 printf("%s",buf);



//功能

 while(1)

 { 

  printf("ftp> ");

  //获取命令 

  gets(buf);

  //命令分支

  if(!strcmp(buf,"ls"))

  {

   func();

   ls_run();

   close(sockfd1);

   continue;

  }

  if(!strcmp(buf,"bye"))

  {

   break; 

  }

  sscanf(buf,"%s %s",tem1,tem2);

  if(!strcmp(tem1,"cd") )

  { 



   cd_run();

   close(sockfd1);

   continue;

  }



  if(!strcmp(tem1,"get"))

  {

   get_run();

   close(sockfd1);

   continue;

  }

  if(!strcmp(tem1,"put"))

  {



   put_run();



   continue;

  }

  if(!strcmp(tem1,"delete"))

  {

   delete_run();

   close(sockfd1);

   continue;

  }

 }

}

//主函数

int main(int argc,char* argv[])

{ 

 //socket

 sockfd = socket(AF_INET,SOCK_STREAM,0);

 if(0 > sockfd)

 {

  perror("socket");

  return -1;

 }

 struct sockaddr_in addr = {AF_INET};

 addr.sin_port = htons(21);

 addr.sin_addr.s_addr = inet_addr(argv[1]);

 int ret = connect(sockfd,(sockaddrp)&addr,sizeof(addr));

 if(0 > ret)

 {

  perror("connect");

  return -1;

 }



 login();





 close(sockfd);

}

1. printf 格式化输入输出

printf     %[flags] [width] [.prec] [hlL] type

新濠国际登录平台 1

新濠国际登录平台 2

printf("%*dn",6,123); 把6变为参数,其实是 printf("%6dn",123);

新濠国际登录平台 3

新濠国际登录平台 4

int num; 

printf("%d%nn",12345,&num); 

当printf 到这里时已经输出了多少个字符。填到变量num中。

public void createFile() throws IOException{
        File file=new File("c:/myFileTest/test1.doc");
        FileOutputStream fos=new FileOutputStream(file);//构建FileOutputStream对象,文件不存在会自动新建
        OutputStreamWriter osWriter=new OutputStreamWriter(fos, "utf-8");
        //构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
        osWriter.append("这个是中文输入啦啦");
        //写入到缓冲区
        osWriter.append("rn");
        //换行
        osWriter.append("this is English input");
        //刷新缓存冲,写入到文件,如果下面已经没有写入的内容了,直接close也会写入
        osWriter.close();
        //关闭写入流,同时会把缓冲区内容写入文件,所以上面的注释掉
        fos.close();
        //关闭输出流,释放系统资源
    }

    public void readFile() throws IOException{
        File file=new File("c:/myFileTest/test1.doc");
        FileInputStream fis=new FileInputStream(file);//创建FileInputStream对象
        InputStreamReader isReader=new InputStreamReader(fis,"utf-8");
        //创建InputStreamReader对象,编码与写入相同
        StringBuffer sb=new StringBuffer();
        while(isReader.ready()){
            sb.append((char)isReader.read());
            // 转成char加到StringBuffer对象中
        }
        System.out.println(sb.toString());
        isReader.close();
        // 关闭读取流
        fis.close();
        // 关闭输入流,释放系统资源
    }

    /**
     * inputStream和outputStream的用法
     * 该方法不好用,因为会出现乱码
     */
    public void InputStreamAndOutputStream() throws IOException{
        //创建文件流
        byte bwrite[]={11,43,23,57};
        OutputStream os=new FileOutputStream("c:/myFileTest/testa.txt");
        for(byte a:bwrite){
            os.write(a);
        }
        os.close();

        //读取文件流
        InputStream is=new FileInputStream("c:/myFileTest/testa.txt");
        int size=is.available();
        for(int i=0;i<size;i++){
            System.out.println((char)is.read());
        }
        is.close();
    }

    /**
     * 创建文件夹
     */
    public void createDir(){

        String dirName="c:/yin/yan/ling";
        File f=new File(dirName);
        f.mkdirs();//mkdirs()方法创建一个文件夹和它的所有父文件夹。


        /*File类中有两个方法可以用来创建文件夹:
        mkdir( )方法创建一个文件夹,成功则返回true,失败则返回false。失败表明File对象指定的路径已经存在,或者由于整个路径还不存在,该文件夹不能被创建。
        mkdirs()方法创建一个文件夹和它的所有父文件夹。*/
    }
    /**
     * 读取目录
     */
    @Test
    public void DirList(){
        String dirName="c:/yin";
        File f=new File(dirName);


        //判断是否文件夹
        if(f.isDirectory()){

            System.out.println("directory of ::"+dirName);
            String s[]=f.list();
            System.out.println("the list length is "+s.length);

            for(int i=0;i<s.length;i++){

                File f1=new File(dirName+"/"+s[i]);

                if(f1.isDirectory()){
                    System.out.println("directory of :::"+s[i]);
                }else{
                    System.out.println(s[i]+" is not directory");
                }

            }
        }else{
            System.out.println(dirName+" is not a directory");
        }
    }

文件操作(2):文件粉碎机,文件操作文件粉碎机

文件粉碎机原理:文件被删除之前,用随机字符对其进行写操作

(注:参考的教材使用的是BCB编译器,BCB不会,所以这里改成使用MFC)

一、

首先建立一个基于对话框的MFC工程,在对话框添加如图所示控件

m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0); int strPartDim[2]= { 400, -1}; //分割成左右两份,左边占400个像素 m_StatusBar.SetParts(2, strPartDim);

设置好之后,我们用CStatusBarCtrl::SetText()就可以在状态栏上显示文字了。

注意,VC6.0中,状态栏不能在资管控件中直接添加,而是需要使用程序来创建,因此,也只有在程序运行之后才能显示出来

三、

下面来添加对话框控件的响应。首先点击浏览要弹出打开文件对话框,点击文件夹的文件,令点击的文件名显示在左边的文本编辑框中。

1、首先为文本编辑框关联一个名为m_strPath 的成员变量。按下ctrl+w,选择编辑控件ID,添加成员变量,输入m_strPath

2、双击 浏览按钮,进入响应函数,在里面添加如下代码:

    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    CFileDialog fileDlg(TRUE);
    fileDlg.m_ofn.lpstrTitle="打开文件";
    fileDlg.m_ofn.lpstrFilter="All Files(*.*)*.*"; fileDlg.m_ofn.lpstrDefExt="*.txt";
    if(IDOK==fileDlg.DoModal())
    {  
    CFile file(fileDlg.GetFileName(),CFile::modeRead);
    m_strPath=fileDlg.GetPathName();  //将文件名赋给m_strPath
    UpdateData(FALSE);       //立即显示出来
    }  

四,主程序,双击开始粉碎,添加按钮响应。

添加如下代码:

    if(m_strPath=="")
    {
        return;
    }
    if((MessageBox("文件一旦删除将无法恢复,您确定要继续执行操作吗?","提醒",MB_OKCANCEL|MB_ICONWARNING|MB_DEFBUTTON2))==IDCANCEL)
    {
        m_StatusBar.SetText(_T("您取消了操作"), 0, 0);  //设置状态栏文本提示信息
        return;
    }
    char buff[1024]={0};

    HANDLE hFile=CreateFile(m_strPath,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL);
    DWORD dwLen=SetFilePointer(hFile,0,NULL,FILE_END);
    CString temp;
    temp.Format("文件大小%dbyte",dwLen);
    m_StatusBar.SetText(temp, 0, 0);

    for(int i=0;i<3;i++)
    {
        temp.Format("共进行%d遍擦除",i+1);
        m_StatusBar.SetText(temp, 0, 0);
        SetFilePointer(hFile,0,NULL,FILE_BEGIN);
        if(dwLen<=1024)
        {
            dwLen=WriteFile(hFile,buff,(dwLen<sizeof(buff))?dwLen:sizeof(buff),&dwLen,NULL);
        }
    }

    CloseHandle(hFile);
    if(!DeleteFile(m_strPath))
    {
        m_StatusBar.SetText(_T("文件删除失败,但已无法恢复"), 0, 0);
    }

五、

添加取消按钮的响应,双击,写个OnOK();就行了

程序运行效果:

新濠国际登录平台 5

 

文件粉碎机原理:文件被删除之前,用随机字符对其进行写操作 (注:参考的教材使用...

2. scanf 格式化输入输出

scanf    %[flag] type

新濠国际登录平台 6

scanf("%*d%d",&num);   跳过输入的第一个整数

新濠国际登录平台 7

新濠国际登录平台,%[^,] 读逗号前的所有东西

  

本文由新濠国际登录平台发布于新闻动态,转载请注明出处:首先建立一个基于对话框的MFC工程

关键词: