友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第21章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




           #0015 

           #0016  mon。obj : mon。c 

           #0017     cl /W3 /GX /Zi /YX /Od /DWIN32 /D_CONSOLE /FR /c mon。c 

           #0018 

           #0019  exedump。obj : exedump。c 

           #0020     cl /W3 /GX /Zi /YX /Od /DWIN32 /D_CONSOLE /FR /c exedump。c 

           #0021 

           #0022  objdump。obj : objdump。c 

           #0023     cl /W3 /GX /Zi /YX /Od /DWIN32 /D_CONSOLE /FR /c objdump。c 



       如果是很简单的情況,例如本节的  JBACKUP  只有一个  C  原代码,那么这样也行 (在 



       命令列之下): 



           cl jbackup。c     A 将获得 jbackup。exe 



                                                                                              31 


…………………………………………………………Page 94……………………………………………………………

    注意,环境变量要先设定好(请参考本章稍早的「如何产生Generic。exe 」一节)。 



    第3章的Frame_ 程序则是这样完成的: 



    cl my。cpp mfc。cpp       my。exe 

                              将获得 



    至于到底该联结哪些链接库,全让CL。EXE 去伤脑筋就好了。 



JBACKUP :Win32 Console 程序设计 



    撰写console 程序,有几个重点请注意: 



    1。 进入点为main 。 



             pr intf scanf cin cout  

    2。 可以使用      、     、   、    等标准输出入装置。 



    3。 可以调用和GUI 无关的Win32 API 。 



    我的这个JBACKUP 程序可以有一个或两个参数,用法如下: 



      C:SomeoneDir》JBACKUP SrcDir 'DstDir' 



      例如JBACKUP g: k: 



      将磁盘目录SrcDir  中的新文件拷贝到磁盘目录DstDir , 



      并将DstDir  的赘余文件杀掉。 



                 DstDir      k:                  …MO … 

      如果没有指定          ,预设为      (那是我的可写入光驱              的代码啦) 



      并将k:  的磁盘目录设定与SrcDir 相同。 



      例如JBACKUP g: 



      而目前g: 是g:u002doc 



                 g:u002doc   k:u002doc        k:u002doc  

      那么相当于把              备份到            中,并杀掉             的赘余文件。 



    JBACK 检查SrcDir  中所有的文件和DstDir  中所有的文件,把比较新的文件从SrcDir 



    中拷贝到DstDir 去,并把DstDir  中多出来的文件删除,使ScrDir 和DstDir  的文件保 



                                                                              32 


…………………………………………………………Page 95……………………………………………………………

持完全相同。之所以不做xcopy 完全拷贝动作,为的是节省拷贝时间(做为备份装置, 



通常是软盘或磁带或可擦写光盘MO,读写速度并不快)。 



JBACKUP 没有能力处理SrcDir 底下的子目录文件。如果要处理子目录,漂亮的作法是 



使用递归(recursive ),但是有点伤脑筋,这一部份留给你了。我的打字速度还算快,多 



切换几次磁盘目录不是问题,呵呵呵。 



JBACKUP 使用以下数个Win32 APIs : 



       GetCurrentDirectory 



       FindFirstFile 



       FindNextFile 



       pareFileTime 



       CopyFile 



       DeleteFile 



在处理完毕命令列参数中的SrcDir 和DstDir 之后,JBACKUP 先把SrcDir  中的所有 



文件(不含子目录文件)搜寻一遍,储存在一个数组srcFiles' '  中,每个数组元素是一 



个我自定的SRCFILE 数据结构: 



     typedef struct _SRCFILE 



     { 



         WIN32_FIND_DATA fd; 



         BOOL bIsNew; 



     } SRCFILE; 



     SRCFILE srcFiles'FILEMAX'; 



    WIN32_FIND_DATA fd; 



         // prepare srcFiles''。。。 



         bRet = TRUE; 



         iSrcFiles = 0; 



         hFile = FindFirstFile (SrcDir; &fd); 



         while  (hFile  != INVALID_HANDLE_VALUE && bRet) 



         { 



              if  (fd。dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE) { 



                  srcFiles'iSrcFiles'。fd = fd; 



                  srcFiles'iSrcFiles'。bIsNew = FALSE; 



                  iSrcFiles++; 



              } 



                                                                                    33 


…………………………………………………………Page 96……………………………………………………………

       bRet = FindNextFile (hFile; &fd); 



     } 



再把DstDir  中的所有文件(不含子目录文件)搜寻一遍,储存在一个destFiles' ' 数组 



中,每个数组元素是一个我自定的DESTFILE 数据结构: 



     typedef struct _DESTFILE 



     { 



         WIN32_FIND_DATA fd; 



         BOOL bMatch; 



     } DESTFILE; 



     DESTFILE destFiles'FILEMAX'; 



     WIN32_FIND_DATA fd; 



        bRet = TRUE; 



        iDestFiles = 0; 



        hFile = FindFirstFile (DstDir; &fd); 



        while  (hFile  != INVALID_HANDLE_VALUE && bRet) 



        { 



             if  (fd。dwFileAttributes == FILE_ATTRIBUTE_ARCHIVE) { 



                 destFiles'iDestFiles'。fd = fd; 



                 destFiles'iDestFiles'。bMatch = FALSE; 



                  iDestFiles++; 



             } 



            bRet = FindNextFile (hFile; &fd); 



     } 



然后比对srcFiles' ' 和destFiles' ' 之中的所有文件名称以及建档日期,找出scrFiles' ' 



               desFiles' '                     bIsNew          TRUE 

中的哪些文件比                 中的文件更新,然后将其                    字段设为          。同时也 



        desFiles' '            srcFiles' '            bMatch        FALSE 

对存在于              中而不存在于                中的文件,令其               字段为          。 



           srcFiles' '               bIsNew       TRUE             DstDir  

最后,检查               中的所有文件,将                字段为         者,拷贝到            去。 



      destFiles' '               bMatch        FALSE  

并检查              中的所有文件,将               字段为           者统统杀掉。 



JBACKUP  的源代码与可执行文件放在书附盘片的Jbackup。01 子目录中。 



                                                                                        34 


…………………………………………………………Page 97……………………………………………………………

MFCCON :MFC Console 程序设计 



    当你的进度还在第1章的Win32 基本程序观念,我却开始讲如何设计一个MFC console 



    程序,是否有点时地不宜? 



    是有一点!所以我挑一个最单纯而无与别人攀缠纠葛的MFC 类别,写一个40 行的小 



    程序。目标纯粹是为了做一个导入,并与Win32 console 程序做一比较。 



    我所挑选的两个单纯的MFC 类别是CStdioFile 和CString : 



                             CObject 



                      CFile                   CString 



                           CStdioFile 



                           CMemFile 



                          CSocketFile 



                         COleStreamFile 



    在MFC 之中,CFile 用来处理正常的文件I/O 动作。CStdioFile 衍生自CFile,一个 



    CStdioFile       C runtime   f open          stream     Stream  

            对象代表以            函数       所开启的一个          文件。        文件 



    有缓冲区,可以文字模式(预设情况)或二进制模式开启。 



    CString 对象代表一个字符串,是一个完全独立的类别。 



    我的例子用来计算小于100 的所有费伯纳契数列(Fabonacci sequence )。费伯纳契数列 



    的计算方式是: 



               1 

    1。 头两个数为 。 



    2。 接下来的每一个数是前两个数的和。 



                                                                                35 


…………………………………………………………Page 98……………………………………………………………

                   以下便是  MFCCON。CPP  內容: 



                   #0001  // File   : MFCCON。CPP 

                   #0002  // Author : J。J。Hou / Top Studio 

                   #0003  // Date   : 1997。04。06 

                   #0004  // Goal   : Fibonacci sequencee; less than 100 

                   #0005  // Build  : cl /MT mfccon。cpp  (/MT means Multithreading) 

                   #0006 

                   #0007  #include  

                   #0008  #include  

                   #0009 

                   #0010  int main() 

                   #0011  { 

                   #0012  int lo; hi; 

                   #0013  CString str; 

                   #0014  CStdioFile fFibo; 

                   #0015 

                   #0016      fFibo。Open (〃FIBO。DAT〃; CFile::modeWrite | 

                   #0017 
返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!