mfc 文件 文件夹操作大全

来源:互联网 发布:手机怎么看淘宝店铺 编辑:程序博客网 时间:2024/05/22 11:35

1.创建文件夹

CreateDirectory(%%1,NULL);

 

2.创建文件

CFile file; 

file.Open(%%1,CFile::modeCreate|CFile::modeWrite); 

 

3.删除文件

DeleteFile(%%1);

 

4.删除文件夹

RemoveDirectory(%%1); 

 

5.删除一个目录下所有的文件夹

CFileFind finder;

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking)

{

     bWorking = finder.FindNextFile();

     if (finder.IsDirectory())

     {

         RemoveDirectory(finder.GetFilePath());

     }

 

6.清空文件夹

RemoveDirectory(%%1);

CreateDirectory(%%1,NULL);

 

7.读取文件

char sRead[5120];

CFile mFile(_T(%%1),CFile::modeRead);

while (sRead!=NULL)

{

     mFile.Read(sRead,5120);

     CString %%2(sRead);

     %%3

}

mFile.Close();

 

if (GetLastError() == ERROR_NO_MORE_FILES) 

                 { 

                     //遍历文件夹完成 

                     fFinished = TRUE; 

                 } 

                 else 

                 { 

                     //找不到下一个文件

                     return; 

                 } 

             } 

         } 

         FindClose(hSearch);

     }

 

15.移动文件夹

WIN32_FIND_DATA FileData; 

HANDLE hSearch; 

DWORD dwAttrs; 

char szDirPath[] = %%2; 

char szNewPath[MAX_PATH]; 

char szHome[MAX_PATH]; 

BOOL fFinished = FALSE; 

if (!CreateDirectory(szDirPath, NULL)) 

{

     //不能创建新的目录 

     return;

}

CString path;

path.Format("%s\\*.*",%%1);

hSearch = FindFirstFile(path, &FileData); 

if (hSearch == INVALID_HANDLE_VALUE) 

     return; 

while (!fFinished) 

     lstrcpy(szNewPath, szDirPath); 

     lstrcat(szNewPath, FileData.cFileName); 

     if (CopyFile(FileData.cFileName, szNewPath, FALSE)) 

     { 

         dwAttrs = GetFileAttributes(FileData.cFileName); 

         if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) 

         { 

             SetFileAttributes(szNewPath, 

                 dwAttrs | FILE_ATTRIBUTE_READONLY); 

         } 

     } 

     else 

     { 

         //不能复制文件

         return; 

     } 

     if (!FindNextFile(hSearch, &FileData)) 

     { 

         if (GetLastError() == ERROR_NO_MORE_FILES) 

         { 

             //遍历文件夹完成 

             fFinished = TRUE; 

         } 

         else 

         { 

             //找不到下一个文件

             return; 

         } 

     } 

FindClose(hSearch); 

RemoveDirectory(%%1); 16.移动一个文件夹下所有的文件夹到另一个目录下

WIN32_FIND_DATA FileData; 

HANDLE hSearch; 

DWORD dwAttrs; 

char szDirPath[] = %%2; 

char szNewPath[MAX_PATH]; 

char szHome[MAX_PATH]; 

BOOL fFinished = FALSE; 

if (!CreateDirectory(szDirPath,NULL)) 

{

     //不能创建新的目录 

     return;

}

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking) 

     bWorking = finder.FindNextFile();

     if(finder.IsDirectory()){

         hSearch = FindFirstFile(finder.GetFilePath()+"\\*.*", &FileData); 

         if (hSearch == INVALID_HANDLE_VALUE) 

         { 

             return; 

         } 

         while (!fFinished) 

         { 

             lstrcpy(szNewPath, szDirPath); 

             lstrcat(szNewPath, FileData.cFileName); 

             if (CopyFile(FileData.cFileName, szNewPath, FALSE)) 

             { 

                 dwAttrs = GetFileAttributes(FileData.cFileName); 

                 if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) 

                 { 

                     SetFileAttributes(szNewPath, 

                         dwAttrs | FILE_ATTRIBUTE_READONLY); 

                 } 

             } 

             else 

             { 

                 //不能复制文件

                 return; 

             } 

             if (!FindNextFile(hSearch, &FileData)) 

             { 

                 if (GetLastError() == ERROR_NO_MORE_FILES) 

                 { 

                     //遍历文件夹完成 

                     fFinished = TRUE; 

                 } 

                 else 

                 { 

                     //找不到下一个文件

                     return; 

                 } 

             } 

         } 

         FindClose(hSearch);

         RemoveDirectory(finder.GetFilePath().GetBuffer(0));

     }

} 17.以一个文件夹的框架在另一个目录创建文件夹和空文件

WIN32_FIND_DATA FileData; 

HANDLE hSearch; 

DWORD dwAttrs; 

char szDirPath[] = %%2; 

char szNewPath[MAX_PATH]; 

char szHome[MAX_PATH]; 

BOOL fFinished = FALSE; 

if (!CreateDirectory(szDirPath, NULL)) 

{

     //不能创建新的目录 

     return;

}

CString path;

path.Format("%s\\*.*",%%1);

hSearch = FindFirstFile(path, &FileData); 

if (hSearch == INVALID_HANDLE_VALUE) 

     return; 

while (!fFinished) 

     lstrcpy(szNewPath, szDirPath); 

     lstrcat(szNewPath, FileData.cFileName); 

     HANDLE hFile=CreateFileHandle hFile=CreateFile(szNewPath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);

     if(!hFile)

     {

         //不能创建文件

         return;

     } 

     if (!FindNextFile(hSearch, &FileData))

     { 

         if (GetLastError() == ERROR_NO_MORE_FILES) 

         { 

             //遍历文件夹完成 

             fFinished = TRUE; 

         } 

         else 

         { 

             //找不到下一个文件

             return;

         } 

     } 

FindClose(hSearch); 

 

18.复制文件

CopyFile(%%1,%%2,true);19.复制一个文件夹下所有的文件到另一个目录

//#include <string>

using std::string;

char sep='/';

#ifdef _WIN32

sep='\\';

#endif

CFileFind finder; 

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking) 

     bWorking = finder.FindNextFile();

     if(!finder.IsDirectory() || finder.IsDots()){

         string s(finder.GetFileName());

         CString sourcefile(%%1);

         if(s.rfind(sep,s.length())!=string::npos)

         {

             sourcefile=sourcefile+"//"+s.substr(i+1,s.length()-i);

             CString targetfile(s.substr(i+1,s.length()-i));

             targetfile=%%2+"//"+targetfile/;

             CopyFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true);

         }

     }

 

20.提取扩展名

CString path(%%1);

CString %%2=path.Mid(path.ReverseFind('.'));

 

21.提取文件名

CString path(%%1);

CString %%2=path.Mid(path.ReverseFind('\\')+1);

 

22.提取文件路径

char appName[MAX_PATH];

GetModualFileName(NULL,appName,MAX_PATH);23.替换扩展名

//#include <string>

using std::string;

string s(%%1);

string newExt(%%2);

string::size_type i=s.rfind('.',s.length());

if(i!=string::npos)

s.replace(i+1,newExt.length(),newExt);

CString %%3(s); 

 

24.追加路径

/*

#include <string>

#include <cstdlib>

#include <boost/filesystem/operations.hpp>

#include <boost/filesystem/fstream.hpp>

*/

using namespace std;

using namespace boost::filesystem;

try {

     path p1=complete(path(%%2,native),

         path(%%1,native));

     path p2=system_complete(path(%%2,native));

     CString %%3(p3);

}

catch(exception& e){

     //e.what();

 

25.移动文件

MoveFile(%%1,%%2); 26.移动一个文件夹下所有文件到另一个目录

//#include <string>

using std::string;

char sep='/';

#ifdef _WIN32

sep='\\';

#endif

CFileFind finder; 

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking) 

     bWorking = finder.FindNextFile();

     if(!finder.IsDirectory() || finder.IsDots()){

         string s(finder.GetFileName());

         CString sourcefile(%%1);

         if(s.rfind(sep,s.length())!=string::npos)

         {

             sourcefile=sourcefile+"//"+s.substr(i+1,s.length()-i);

             CString targetfile(s.substr(i+1,s.length()-i));

             targetfile=%%2+"//"+targetfile/;

             MoveFile(sourcefile.GetBuffer(0),targetfile.GetBuffer(0),true);

         }

     }

 

27.指定目录下搜索文件

CString strFileTitle;

CFileFind finder;

BOOL bWorking = finder.FindFile(%%1); //"C:\\windows\\sysbkup\\*.cab"

while(bWorking)

{

     bWorking=finder.FindNextFile();

     strFileTitle=finder.GetFileTitle();

} 28.打开对话框

CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,"All Files (*.*)|*.*||",AfxGetMainWnd());

CString str(" ",10000);

mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);

str.ReleaseBuffer();

POSITION mPos=mFileDlg.GetStartPosition();

CString pathName(" ",128);

CFileStatus status;

while(mPos!=NULL)

{

     pathName=mFileDlg.GetNextPathName(mPos);

     CFile::GetStatus( pathName, status );

 

29.文件分割

CFile m_File;

CString m_Filename,m_FileTitle,m_FilePath;

m_FileName=%%1;

char pBuf[4096];

if(m_File.Open(m_FileName,CFile::modeRead | CFile::shareDenyWrite))

{

     m_FileName=m_File.GetPathName();

     m_FileTitle=m_File.GetFileTitle();

     DWORD FileLength=m_File.GetLength();

     DWORD PartLength=FileLength/2+FileLength%2;

     int nCount=1;

     CString strName;

     CFile wrFile;

     DWORD ReadBytes;

     while(true)

     {

         ReadBytes=m_File.Read(pBuf,PartLength);

         strName.Format("%s%d",m_FIleTitle,nCount);

         wrFile.Open(strName,CFile::modeWrite | CFile::modeCreate);

         wrFile.Write(pBuf,ReadBytes);

         wrFile.Close();

         if(ReadBytes<PartLength)

             break;

         nCount++;

     }

     m_File.Close();

}

else

AfxMessageBox("不能打开文件"); 30.文件合并

//#include <string>

using std::string;

string s(%%1);

char sep='/';

#ifdef _WIN32

sep='\\';

#endif

size_t sz=s.rfind(sep,s.length());

if(sz!=string::npos)

{

     CFile Out;

     CString strFilename(s.substr(i+1,s.length()-i));

     if(Out.Open(%%2+"//"+strfilename,cfile::modewrite%7ccfile::modecreate)){

         for(int i=1;i<=2;i++)

         {

             CString Filename;

             Filename.Format("%s//%s%d",%%2,strfilename,atoi(i));

             CFile In;

             if(In.Open(Filename,CFile::modeRead)){

                 char cbBuffer[4096];

                 int nFilesize=In.GetLength();

                 while(nFilesize>0){

                     int nSize=sizeof(cbBuffer);

                     if(nSize>nFilesize)

                         nSize=nFilesize;

                     try{

                         In.Read(cbBuffer,nSize);

                     }

                     catch(CFileException *e){

                         char *lpMsgBuf;

                         if(FormatMessage(

                             FORMAT_MESSAGE_ALLOCATE_BUFFER |

                             FORMAT_MESSAGE_FROM_SYSTEM, NULL,e->m_lOsError,

                             MAKELANGID(LANG_NEUTRAL,

                             SUBLANG_DEFAULT),

                             (LPSTR)&lpMsgBuf,0,NULL)>0){

                             AfxMessageBox(lpMsgBuf);

                             LocalFree(lpMsgBuf);

                         }

                         e->Delete();

                         return;

                     }

                     try{

                         Out.Write(cbBuffer,nSize);

                     }

                     catch(CFileException *e){

                         char *lpMsgBuf;

                         if(FormatMessage(

                             FORMAT_MESSAGE_ALLOCATE_BUFFER |

                             FORMAT_MESSAGE_FROM_SYSTEM,NULL,e->m_lOsError,

                             MAKELANGID(LANG_NEUTRAL,

                             SUBLANG_DEFAULT),

                             (LPSTR)&lpMsgBuf,0,NULL)>0){

                             AfxMessageBox(lpMsgBuf);

                             LocalFree(lpMsgBuf);

                         }

                         e->Delete();

                         return;

                     }

                     nFilesize=nSize;

                 }

             }

             else

                 AfxMessageBox("不能打开"+Filename);

         }

     }

}

else

     AfxMessageBox("不能创建输出文件");

8.写入文件

CFile mFile(_T(%%1), CFile::modeWrite|CFile::modeCreate);

mFile.Write(%%2,sizeof(%%2));

mFile.Flush();

mFile.Close(); 

 

9.写入随机文件

char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];

GetTempPath(_MAX_PATH, szTempPath);

GetTempFileName(szTempPath,_T ("my_"),0,szTempfile);

CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);

char m_char='a';

m_tempFile.Write(&m_char,2);

m_tempFile.Close();

//循环写入多个值

strTempA;

int i;

int nCount=6;

//共有6个文件名需要保存

for (i=0;i{strTemp.Format("%d",i);

strTempA=文件名;

//文件名可以从数组,列表框等处取得.

::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,

c:\\usefile\\usefile.ini);

}

strTemp.Format("%d",nCount);

::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");

//将文件总数写入,以便读出.

//读出

nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");

for(i=0;i{strTemp.Format("%d",i);

strTemp="FileName"+strTemp;

::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");

//使用strTempA中的内容.

 

10.读取文件属性

DWORD dwAttrs = GetFileAttributes(%%1); 

if(dwAttrs & FILE_ATTRIBUTE_READONLY)      {   

        %%2

}     

if(dwAttrs & FILE_ATTRIBUTE_NORMAL){   

        %%3

}   

 

11.写入属性

SetFileAttributes(%%1,dwAttrs | FILE_ATTRIBUTE_READONLY);   

 

12.枚举一个目录下所有文件夹

CFileFind finder; 

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking) { 

     bWorking = finder.FindNextFile();

     if(finder.IsDirectory()){

         CString %%1=finder.GetFilePath();

         %%2

     }

 

13.复制文件夹

WIN32_FIND_DATA FileData; 

HANDLE hSearch; 

DWORD dwAttrs; 

char szDirPath[] = %%2; 

char szNewPath[MAX_PATH]; 

char szHome[MAX_PATH]; 

BOOL fFinished = FALSE; 

if (!CreateDirectory(szDirPath, NULL)) {

     //不能创建新的目录 

        return;

}

CString path;

path.Format("%s\\*.*",%%1);

hSearch = FindFirstFile(path, &FileData); 

if (hSearch == INVALID_HANDLE_VALUE) { 

        return; 

while (!fFinished) { 

        lstrcpy(szNewPath, szDirPath); 

        lstrcat(szNewPath, FileData.cFileName); 

        if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { 

            dwAttrs = GetFileAttributes(FileData.cFileName); 

            if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { 

                SetFileAttributes(szNewPath, 

                    dwAttrs | FILE_ATTRIBUTE_READONLY); 

            } 

        } 

        else { 

            //不能复制文件

            return; 

        } 

        if (!FindNextFile(hSearch, &FileData)) { 

            if (GetLastError() == ERROR_NO_MORE_FILES) { 

                //遍历文件夹完成 

                fFinished = TRUE; 

            } 

            else { 

                //找不到下一个文件

                return; 

            } 

        } 

FindClose(hSearch); 

14.复制一个目录下所有的文件夹到另一个文件夹下

WIN32_FIND_DATA FileData; 

HANDLE hSearch; 

DWORD dwAttrs; 

char szDirPath[] = %%2; 

char szNewPath[MAX_PATH]; 

char szHome[MAX_PATH]; 

BOOL fFinished = FALSE; 

if (!CreateDirectory(szDirPath,NULL)) 

{

     //不能创建新的目录 

     return;

}

CString path;

path.Format("%s\\*.*",%%1);

BOOL bWorking = finder.FindFile(path); 

while (bWorking) 

     bWorking = finder.FindNextFile();

     if(finder.IsDirectory()){

         hSearch = FindFirstFile(finder.GetFilePath()+"\\*.*", &FileData); 

         if (hSearch == INVALID_HANDLE_VALUE) 

         { 

             return; 

         } 

         while (!fFinished) 

         { 

             lstrcpy(szNewPath, szDirPath); 

             lstrcat(szNewPath, FileData.cFileName); 

             if (CopyFile(FileData.cFileName, szNewPath, FALSE)) 

             { 

                 dwAttrs = GetFileAttributes(FileData.cFileName); 

                 if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) 

                 { 

                     SetFileAttributes(szNewPath, 

                         dwAttrs | FILE_ATTRIBUTE_READONLY); 

                 } 

             } 

             else 

             { 

                 //不能复制文件

                 return; 

             } 

             if (!FindNextFile(hSearch, &FileData)) 

             { 

31.文件简单加密

//#include <string>

using std::string;

string s(%%1);

char sep='/';

#ifdef _WIN32

sep='\\';

#endif

size_t sz=s.rfind(sep,s.length());

CString outfile;

if(sz!=string::npos)

{

     CFile Out,In;

     int nFIlesize;

     char *lpMsgBuf;

     CString strFilename(s.substr(i+1,s.length()-i));

     if(!in.Open(%%1,CFile::modeRead)){

         //不能打开输入文件

         return;

     }

     outfile.Format("\\enc_",%%2,strfilename);

     if(!Out.Open(outfile,CFile::modewrite|CFile::modeCreate)){

         //不能打开输出文件

         return;

     }

}

nFilesize=In.GetLength();

lpBuffer=new char[nFilesize];

if(lpBuffer==NULL){

     //不能分配复制缓存

     return;

}

CFileStatus rStatus;

In.GetStatus(%%1,rStatus);

try{

     In.Read(cbBuffer,nFilesize);

}

catch(CFileException *e){

     char *lpMsgBuf;

     if(FormatMessage(

         FORMAT_MESSAGE_ALLOCATE_BUFFER |

         FORMAT_MESSAGE_FROM_SYSTEM,

         NULL,e->m_lOsError,

         MAKELANGID(LANG_NEUTRAL,

         SUBLANG_DEFAULT),

         (LPSTR)&lpMsgBuf,0,NULL)>0){

         AfxMessageBox(lpMsgBuf);

         LocalFree(lpMsgBuf);

     }

     e->Delete();

     return;

}

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

{

     int ibt=lpBuffer[i];

     ibt+=100;

     ibt%=256;

     bpBuffer[i]=(char)ibt;

}

try{

     Out.Write(cbBuffer,nFilesize);

}

catch(CFileException *e){

     char *lpMsgBuf;

     if(FormatMessage(

         FORMAT_MESSAGE_ALLOCATE_BUFFER |

         FORMAT_MESSAGE_FROM_SYSTEM,

         NULL,e->m_lOsError,

         MAKELANGID(LANG_NEUTRAL,

         SUBLANG_DEFAULT),

         (LPSTR)&lpMsgBuf,0,NULL)>0){

         AfxMessageBox(lpMsgBuf);

         LocalFree(lpMsgBuf);

     }

     e->Delete();

     return;

}

Out.Close();

//In.Close();

CFile::SetStatus(outfile,rstatus);

delete[] lpBuffer;

32.文件简单解密

//#include <string>

using std::string;

string s(%%1);

char sep='/';

#ifdef _WIN32

sep='\\';

#endif

size_t sz=s.rfind(sep,s.length());

CString infile;

if(sz!=string::npos)

{

     CFile Out,In;

     int nFIlesize;

     char *lpMsgBuf;

     CString strFilename(s.substr(i+1,s.length()-i));

     infile.Format("%s\\enc_%s",%%2,strfilename)

     if(!in.Open(infile,CFile::moderead)){

         //不能打开输入文件

         return;

}

if(!Out.Open(%%1,CFile::modeWrite|CFile::modeCreate)){

     //不能打开输出文件

     return;

}

nFilesize=In.GetLength();

lpBuffer=new char[nFilesize];

if(lpBuffer==NULL){

     //不能分配复制缓存

     return;

}

CFileStatus rStatus;

In.GetStatus(infile,rstatus);

try{

     In.Read(cbBuffer,nFilesize);

}

catch(CFileException *e){

     char *lpMsgBuf;

     if(FormatMessage(

         FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,

         NULL,e->m_lOsError,

         MAKELANGID(LANG_NEUTRAL,

         SUBLANG_DEFAULT),

         (LPSTR)&lpMsgBuf,0,NULL)>0){

         AfxMessageBox(lpMsgBuf);

         LocalFree(lpMsgBuf);

     }

     e->Delete();

     return;

}

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

{

     int ibt=lpBuffer[i];

     ibt-=100;ibt+=256;

     ibt%=256;

     bpBuffer[i]=(char)ibt;

}

try{

     Out.Write(cbBuffer,nFilesize);

}

catch(CFileException *e){

     char *lpMsgBuf;

     if(FormatMessage(

         FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,

         NULL,e->m_lOsError,

         MAKELANGID(LANG_NEUTRAL,

         SUBLANG_DEFAULT),

         (LPSTR)&lpMsgBuf,0,NULL)>0){

         AfxMessageBox(lpMsgBuf);

         LocalFree(lpMsgBuf);

     }

     e->Delete();

     return;

}

Out.Close();

//In.Close();

CFile::SetStatus(%%1,rStatus);

delete[] lpBuffer;

 

33.读取ini文件属性

CStdioFile inifile(%%1,CFile::modeRead);

CString path = inifile.GetFilePath();

inifile.Close();

char key[1024];

DWORD bytes = GetPrivateProfileString(%%2,%%3,%%4,key,1024,path);

if(bytes < 1024)

key[bytes] = '\0';

CString %%5(key); 

 

34.合并一个目录下所有的文件

CString Directory;

Directory.Format("%s\\*.*",%%1);

CFileFind FFile;

CFile Out;

if(Out.Open(%%2,CFile::modeWrite|CFile::modeCreate)){

     BOOL bFound=FFile.FindFile(Directory);

     while(bFound)

     {

         bFound=FFile.FileNextFile();

         if(!FFile.IsDirectory() && !FFile.IsDots())

         {

             CString Filename=FFile.GetFileName();

             CFile In;

             if(In.Open(Filename,CFile::modeRead)){

                 char cbBuffer[4096];

                 int nFIlesize=In.GetLength();

                 while(nFIlesize>0){

                     {

                         int nSize=sizeof(cbBuffer);

                         if(nSize>nFilesize)

                             nSize=nFilesize;

                         try {

                             In.Read(cbBuffer,nSize);

                         }

                         catch(CFileException *e){

                             char *lpMsgBuf;

                             if(FormatMessage(

                                 FORMAT_MESSAGE_ALLOCATE_BUFFER |

 

FORMAT_MESSAGE_FROM_SYSTEM,

                                 NULL,e->m_lOsError,

                                 MAKELANGID(LANG_NEUTRAL,

                                 SUBLANG_DEFAULT),

                                 (LPSTR)&lpMsgBuf,0,NULL)>0){

                                 AfxMessageBox(lpMsgBuf);

                                 LocalFree(lpMsgBuf);

                             }

                             e->Delete();

                             return;

                         }

                         try {

                             Out.Write(cbBuffer,nSize);

                         }

                         catch(CFileException *e){

                             char *lpMsgBuf;

 

19楼

 

                             if(FormatMessage(

                                 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,

                                 NULL,e->m_lOsError,

                                 MAKELANGID(LANG_NEUTRAL,

                                 SUBLANG_DEFAULT),

                                 (LPSTR)&lpMsgBuf,0,NULL)>0){

                                 AfxMessageBox(lpMsgBuf);

                                 LocalFree(lpMsgBuf);

                             }

                             e->Delete();

                             return;

                         }

                         nFilesize=nSize;

                     }

                 }

                 else

                     AfxMessageBox("不能打开"+Filename);

             }

         }

     }

}

else

     AfxMessageBox("不能创建输出文件"); 

 

35.写入ini文件属性

     /*

     CStdioFile inifile(%%1,CFile::modeRead);

     CString path = inifile.GetFilePath();

     inifile.Close();

     int bytes = GetPrivateProfileInt(%%2,%%3,%%4,path); 

     */

     WritePrivateProfileString(%%2,%%3,%%4,path);

 

36.获得当前路径

TCHAR szDir[MAX_PATH];

GetCurrentDirectory(MAX_PATH,szDir);

CString %%1;

%%1.Format("%s",szDir); 

 

37.读取XML数据库

/*

#include <string>

using namespace std;

*/

char sRead[5192];

const char* name="Name";

const char* name2="author";

const char* root="ProductData";

const char* subNodeTag="Product";

const char* ID="pid";

//%%2="ProductData" //%%4="pid" //%%6="author"

//%%3="Product" //%%5="Name"

char sRead[5192];

CFile mFile(_T(%%1),CFile::modeRead);

mFile.Read(sRead,5192);

if(sRead!=NULL)

{

     string tmp;

     while(sRead!=NULL)

     {

         tmp.append(sRead);

         mFile.Read(sRead,5192);

     }

     string target("001"),globalTag;globalTag.append("<");globalTag.append 

oot);globalTag.append(">");

     string propTag1;propTag1.append("<");propTag1.append(name);propTag1.append(">");

     string endTag1;endTag1.append("</");endTag1.append(name);endTag1.append(">");

     string propTag2;propTag2.append("<");propTag2.append(name2);propTag2.append(">");

     string endTag2;endTag2.append("</");endTag2.append(name2);endTag2.append(">");

     int offset=tmp.find_first_of(globalTag);

     while(offset)

     {

         offset=tmp.find_first_of(globalTag);

         string description;

         tmp.copy(description.begin(),tmp.find_first_of("\"",offset+1)-offset);

         if(target.compare(description)==0)

         {

             string prop,prop2;

             offset=tmp.find_first_of(propTag1,offset)+strlen(name)+2;

             tmp.copy(prop.begin(),tmp.find_first_of(endTag1,offset)-                 offset,offset);

             offset=tmp.find_first_of(propTag2,offset)+strlen(name2)+2;

             tmp.copy(prop2.begin(),tmp.find_first_of(endTag2,offset)-offset,offset);

             //CString %%8(prop),%%9(prop2);

             //%%10

             return 0;

         }

     }

}

else

     return -1; 

 

38.写入XML数据库

/*

#include <string>

using namespace std;

*/

char sRead[5192];

int no;

const char* name="Name";

const char* name2="author";

const char* root="ProductData";

const char* subNodeTag="Product";

const char* ID="pid";

//%%2="ProductData" //%%4="pid" //%%6="port"

//%%3="Product" //%%5="Name" //%%7="author"

CString temp;

char sRead[5192];

string description;

CFile mFile(_T(%%1),CFile::modeRead);

mFile.Read(sRead,5192);

if(sRead!=NULL)

{

     string tmp;

     while(sRead!=NULL)

     {

         tmp.append(sRead);

         memset(sRead,0,5192);

         mFile.Read(sRead,5192);

     }

     temp.Format("<%s %s",subNodeTag,ID);

     int offset=tmp.find_last_of(temp)+strlen(subNodeTag) +strlen(ID)+4;

     temp.Format("\"><%s",name);

     tmp.copy(description.begin(),tmp.find_last_of(temp)- offset,offset);

     no=atoi(description.c_str())+1;

     mFile.Close();

     temp.Format("</%s>",root);

     CString temp2;

     temp2.Format("<%s %s=\"%d\"><%s>%s</%s><%s>%s</% 

s",subNodeTag,ID,no,name,"bbbbbbbbbbbbbbbb",name,name2,"cccccccccccccc",name2);

     tmp.insert(tmp.find_last_of(temp),temp2);

     CFile file(_T("Produces.xml"),CFile::modeWrite);

     file.Write(tmp.c_str(),tmp.size());

     file.Flush();

     file.Close();

}

else

{

     CFile file(_T(%%1),CFile::modeWrite|CFile::modeCreate);

     temp.Format("<?xml version=\"1.0\" encoding=\"gb2312\"?><%s><%s %s=\"0\"><%s>%s</%s><%s>% 

s</%s></%s></%s>",root,subNodeTag,ID,name,"bbbbbbbbbbbbbbbb",name,name2,"cccccccccccccc",name2,subNodeTag,root);

     file.Write(temp.GetBuffer(0),temp.GetLength());

     file.Flush();

     file.Close();

 

39.ZIP压缩文件

//www.zlib.net

/*

         #ifdef _DEBUG

         #pragma comment(lib,"zlibd.lib")

         #else

         #pragma comment(lib,"zlib.lib")

         #endif

         #include "zlib.h"

         #include "zconf.h"

*/

HANDLE hFile, hFileToWrite;

     CString strFilePath;

     m_ctrEdit.GetWindowText(strFilePath); 

 

     //打开要进行压缩的文件

     hFile = CreateFile(strFilePath, // file name

         GENERIC_READ, // open for reading

         FILE_SHARE_READ, // share for reading

         NULL, // no security

         OPEN_EXISTING, // existing file only

         FILE_ATTRIBUTE_NORMAL, // normal file

         NULL); // no attr. template 

 

     if (hFile == INVALID_HANDLE_VALUE)

     {

         AfxMessageBox("Could not open file to read"); // process error

         return;

     } 

 

     HANDLE hMapFile, hMapFileToWrite; 

 

     //创建一个文件映射

     hMapFile = CreateFileMapping(hFile, // Current file handle.

         NULL, // Default security.

         PAGE_READONLY, // Read/write permission.

         0, // Max. object size.

         0, // Size of hFile.

         "ZipTestMappingObjectForRead"); // Name of mapping object. 

 

     if (hMapFile == NULL)

     {

         AfxMessageBox("Could not create file mapping object");

         return;

     } 

 

     LPVOID lpMapAddress, lpMapAddressToWrite; 

 

     //创建一个文件映射的视图用来作为source

     lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.

         FILE_MAP_READ, // Read/write permission

 

24楼

 

         0, // Max. object size.

         0, // Size of hFile.

         0); // Map entire file. 

 

     if (lpMapAddress == NULL)

     {

         AfxMessageBox("Could not map view of file");

         return;

     }

     DWORD dwFileLength,dwFileLengthToWrite;

     dwFileLength = GetFileSize(hFile, NULL);

     m_dwSourceFileLength = dwFileLength;

     //因为压缩函数的输出缓冲必须比输入大0.1% + 12 然后一个DWORD用来保存压缩前的大小,

     // 解压缩的时候用,当然还可以保存更多的信息,这里用不到

     dwFileLengthToWrite = (double)dwFileLength*1.001 + 12 +sizeof(DWORD);

     //以下是创建一个文件,用来保存压缩后的文件

     hFileToWrite = CreateFile("demoFile.rar", // demoFile.rar

         GENERIC_WRITE|GENERIC_READ, // open for writing

         0, // do not share

         NULL, // no security

         CREATE_ALWAYS, // overwrite existing

         FILE_ATTRIBUTE_NORMAL , // normal file

         NULL); // no attr. template 

 

     if (hFileToWrite == INVALID_HANDLE_VALUE)

     {

         AfxMessageBox("Could not open file to write"); // process error

         return;

     }

     hMapFileToWrite = CreateFileMapping(hFileToWrite, // Current file handle.

         NULL, // Default security.

         PAGE_READWRITE, // Read/write permission.

         0, // Max. object size.

         dwFileLengthToWrite, // Size of hFile.

         "ZipTestMappingObjectForWrite"); // Name of mapping object.

     if (hMapFileToWrite == NULL)

     {

         AfxMessageBox("Could not create file mapping object for write");

         return;

     }

     lpMapAddressToWrite = MapViewOfFile(hMapFileToWrite, //Handle to mapping object.FILE_MAP_WRITE, // Read/write permission

         0, // Max. object size.

         0, // Size of hFile.

         0); // Map entire file.

     if (lpMapAddressToWrite == NULL)

     {

         AfxMessageBox("Could not map view of file");

         return;

     }

     //这里是将压缩前的大小保存在文件的第一个DWORD里面

     LPVOID pBuf = lpMapAddressToWrite;

     (*(DWORD*)pBuf) = dwFileLength;

     pBuf = (DWORD*)pBuf + 1;

     //这里就是最重要的,zlib里面提供的一个方法,将源缓存的数据压缩至目的缓存

     //原形如下:

     //int compress (Bytef *dest, uLongf *destLen, const Bytef*source, uLong sourceLen);

     //参数destLen返回实际压缩后的文件大小。

     compress((Bytef*)pBuf,&dwFileLengthToWrite, (Bytef*)lpMapAddress, dwFileLength);

     UnmapViewOfFile(lpMapAddress);

     CloseHandle(hMapFile);

     CloseHandle(hFile);

     UnmapViewOfFile(lpMapAddressToWrite);

     CloseHandle(hMapFileToWrite);

     //这里将文件大小重新设置一下

     SetFilePointer(hFileToWrite,dwFileLengthToWrite + sizeof(DWORD) ,NULL,FILE_BEGIN);

     SetEndOfFile(hFileToWrite);

     CloseHandle(hFileToWrite); 

 

40.ZIP解压缩

//www.zlib.net

/*

#ifdef _DEBUG

#pragma comment(lib,"zlibd.lib")

#else

#pragma comment(lib,"zlib.lib")

#endif

#include "zlib.h"

#include "zconf.h"

*/

HANDLE hFile, hFileToWrite;

CString strFilePath=%%1;

//打开要进行解压缩的文件

hFile = CreateFile(strFilePath, // file name

     GENERIC_READ, // open for reading

     FILE_SHARE_READ, // share for reading

     NULL, // no security

     OPEN_EXISTING, // existing file only

     FILE_ATTRIBUTE_NORMAL, // normal file

     NULL

); // no attr. template

if (hFile == INVALID_HANDLE_VALUE)

{

     AfxMessageBox("Could not open file to read"); // process error

     return;

}

HANDLE hMapFile, hMapFileToWrite;

//创建一个文件映射

hMapFile = CreateFileMapping(hFile, // Current file handle.

     NULL, // Default security.

     PAGE_READONLY, // Read/write permission.

     0, // Max. object size.

     0, // Size of hFile.

     "ZipTestMappingObjectForRead"); // Name of mapping object.

if (hMapFile == NULL)

{

     AfxMessageBox("Could not create file mapping object");

     return;

}

LPVOID lpMapAddress, lpMapAddressToWrite;

//创建一个文件映射的视图用来作为source

lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping

     object.FILE_MAP_READ, // Read/write permission

     0, // Max. object size.

     0, // Size of hFile.

     0); // Map entire file.

if (lpMapAddress == NULL)

{

     AfxMessageBox("Could not map view of file");

     return;

}

DWORD dwFileLength,dwFileLengthToWrite;

dwFileLength = GetFileSize(hFile, NULL) - sizeof(DWORD);

//因为压缩函数的输出缓冲必须比输入大0.1% + 12 然后一个DWORD用来保存压缩前的大小,

// 解压缩的时候用,当然还可以保存更多的信息,这里用不到

// dwFileLengthToWrite = (double)dwFileLength*1.001 + 12 +sizeof(DWORD);

dwFileLengthToWrite = (*(DWORD*)lpMapAddress);

LPVOID pSourceBuf = lpMapAddress;

pSourceBuf = (DWORD*)pSourceBuf + 1;

//以下是创建一个文件,用来保存压缩后的文件

hFileToWrite = CreateFile(%%2, // create demo.gz

     GENERIC_WRITE|GENERIC_READ, // open for writing

     0, // do not share

     NULL, // no security

     CREATE_ALWAYS, // overwrite existing

     FILE_ATTRIBUTE_NORMAL , // normal file

     NULL

); // no attr. template

if (hFileToWrite == INVALID_HANDLE_VALUE)

{

     AfxMessageBox("Could not open file to write"); //process error

     return;

}

hMapFileToWrite = CreateFileMapping(hFileToWrite, // Currentfile handle.

     NULL, // Default security.

     PAGE_READWRITE, // Read/write permission.

     0, // Max. object size.

     dwFileLengthToWrite, // Size of hFile.

     "ZipTestMappingObjectForWrite"); // Name of mapping object.

if (hMapFileToWrite == NULL)

{

     AfxMessageBox("Could not create file mapping object for write");

     return;

}

lpMapAddressToWrite = MapViewOfFile(hMapFileToWrite, //Handle to mapping object.

     FILE_MAP_WRITE, // Read/write permission

     0, // Max. object size.

     0, // Size of hFile.

     0

); // Map entire file.

if (lpMapAddressToWrite == NULL)

{

     AfxMessageBox("Could not map view of file");

     return;

}

//这里是将压缩前的大小保存在文件的第一个DWORD里面

LPVOID pBuf = lpMapAddressToWrite;

//这里就是最重要的,zlib里面提供的一个方法,将源缓存的数据压缩至目的缓存

//原形如下:

//int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

//参数destLen返回实际压缩后的文件大小。

uncompress((Bytef*)pBuf,&dwFileLengthToWrite, (Bytef*)pSourceBuf, dwFileLength);

UnmapViewOfFile(lpMapAddress);

CloseHandle(hMapFile);

CloseHandle(hFile);

UnmapViewOfFile(lpMapAddressToWrite);

CloseHandle(hMapFileToWrite);

//这里将文件大小重新设置一下

SetFilePointer(hFileToWrite,dwFileLengthToWrite,NULL,FILE_BEGIN);

SetEndOfFile(hFileToWrite);

CloseHandle(hFileToWrite); 

原创粉丝点击