• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-60  評論-111  文章-0  trackbacks-0
            自己搞點小東西用的到。
            在工程的根目錄里建一個svn目錄,然后在svn目錄里創建一個版本庫,用svn檢出一下。
            這樣這個工程就可以被svn管理了。
            但是如果整個工程被移動過了,那么svn就會出錯,于是寫了個小程序來重定位,從此可以把工程放在u盤帶著到處跑了。
              1 #include "stdafx.h"
              2 
              3 using namespace std;
              4 
              5 void AlertError(DWORD err)
              6 {
              7     LPVOID lpMsgBuf;
              8     LPVOID lpDisplayBuf;
              9     
             10     FormatMessage(
             11         FORMAT_MESSAGE_ALLOCATE_BUFFER | 
             12         FORMAT_MESSAGE_FROM_SYSTEM |
             13         FORMAT_MESSAGE_IGNORE_INSERTS,
             14         NULL,
             15         err,
             16         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
             17         (LPTSTR) &lpMsgBuf,
             18         0, NULL );
             19     
             20     lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
             21         strlen((char*)lpMsgBuf) + 40); 
             22     sprintf((char*)lpDisplayBuf,"錯誤碼: %d\n信 息: %s", err,lpMsgBuf);
             23     MessageBox(NULL, (LPCTSTR)lpDisplayBuf, "錯誤", MB_OK|MB_ICONERROR); 
             24     
             25     LocalFree(lpMsgBuf);
             26     LocalFree(lpDisplayBuf);
             27 }
             28 
             29 void GetCommandOutput(char* CmdLine, string& strOutput, bool IncludeErr=false)
             30 {
             31     strOutput="";
             32     SECURITY_ATTRIBUTES  sa;
             33     HANDLE hRead, hWrite;
             34     memset(&sa,0,sizeof(sa));
             35     sa.nLength=sizeof(sa);
             36     sa.bInheritHandle=TRUE;
             37     sa.lpSecurityDescriptor=NULL;
             38     if(CreatePipe(&hRead,&hWrite,&sa,0))
             39     {
             40         STARTUPINFO si;
             41         memset(&si,0,sizeof(si));
             42         si.cb=sizeof(si);
             43         si.hStdOutput=hWrite;
             44         si.hStdInput=GetStdHandle(STD_INPUT_HANDLE);
             45         si.hStdError=(IncludeErr?hWrite:GetStdHandle(STD_ERROR_HANDLE));
             46         si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
             47         si.wShowWindow=SW_HIDE;
             48         
             49         PROCESS_INFORMATION pi;
             50         if(CreateProcess(NULL,CmdLine,&sa,&sa,TRUE,CREATE_NO_WINDOW|NORMAL_PRIORITY_CLASS,
             51             NULL,NULL,&si,&pi))
             52         {
             53             char szBuf[512];
             54             DWORD dwReaded;
             55             if(WaitForSingleObject(pi.hProcess,INFINITE)!=WAIT_TIMEOUT)
             56             {
             57                 CloseHandle(hWrite);
             58                 while(ReadFile(hRead,szBuf,511,&dwReaded,NULL))
             59                 {
             60                     szBuf[dwReaded]='\0';
             61                     strOutput+=szBuf;
             62                 }
             63             }
             64             else
             65             {
             66                 cout<<"WaitForSingleObject錯誤;"<<endl;
             67                 CloseHandle(hWrite);
             68                 AlertError(GetLastError());
             69             }
             70             CloseHandle(pi.hThread);
             71             CloseHandle(pi.hProcess);
             72         }
             73         else
             74         {
             75             cout<<"建立進程錯誤;"<<endl;
             76             AlertError(GetLastError());
             77         }
             78         CloseHandle(hRead);
             79     }
             80     else
             81     {
             82         cout<<"建立管道錯誤;"<<endl;
             83         AlertError(GetLastError());
             84     }
             85 }
             86 
             87 int APIENTRY WinMain(HINSTANCE hInstance,
             88                      HINSTANCE hPrevInstance,
             89                      LPSTR     lpCmdLine,
             90                      int       nCmdShow)
             91 {
             92     char szBuf[MAX_PATH+20];
             93     wchar_t wcBuf[MAX_PATH];
             94     int i, j;
             95     string msg;
             96     
             97     GetCommandOutput("svn info --xml",msg);
             98     TiXmlDocument *doc = new TiXmlDocument();
             99     doc->Parse(msg.c_str());
            100     TiXmlNode *node;
            101     node=doc->FirstChild("info");
            102     if(node==NULL)
            103     {
            104         MessageBox(NULL,"當前目錄沒有被SVN","結果",MB_OK|MB_ICONINFORMATION);
            105         return 0;
            106     }
            107     node=node->FirstChild("entry");
            108     if(node==NULL)
            109     {
            110         MessageBox(NULL,"當前目錄沒有被SVN","結果",MB_OK|MB_ICONINFORMATION);
            111         return 0;
            112     }
            113     node=node->FirstChild("wc-info");
            114     if(node==NULL)
            115     {
            116         MessageBox(NULL,"當前目錄沒有被SVN","結果",MB_OK|MB_ICONINFORMATION);
            117         return 0;
            118     }
            119     node=node->FirstChild("wcroot-abspath");
            120     if(node==NULL)
            121     {
            122         MessageBox(NULL,"當前目錄沒有被SVN","結果",MB_OK|MB_ICONINFORMATION);
            123         return 0;
            124     }
            125     strcpy(szBuf,node->ToElement()->GetText());
            126     delete node;
            127     delete doc;
            128 
            129     j=strlen(szBuf);
            130     i=MultiByteToWideChar(CP_UTF8,0,szBuf,j,wcBuf,MAX_PATH);
            131     wcBuf[i]=static_cast<wchar_t>(0);
            132     strcpy(szBuf,"svn relocate file:///");
            133     j=strlen(szBuf);
            134     i=WideCharToMultiByte(CP_ACP,0,wcBuf,i,&szBuf[j],MAX_PATH,NULL,NULL);
            135     szBuf[i+j]=static_cast<char>(0);
            136     SetCurrentDirectory(&szBuf[j]);
            137 
            138     i+=j;
            139     if((szBuf[i-1]=='\\')||(szBuf[i-1]=='/'))
            140         strcat(szBuf,"svn/");
            141     else
            142         strcat(szBuf,"/svn/");
            143     for(i=0,j=strlen(szBuf);i<j;i++)
            144     {
            145         if(szBuf[i]=='\\')
            146             szBuf[i]='/';
            147     }
            148 
            149     GetCommandOutput(szBuf,msg,true);
            150     MessageBox(NULL,msg.c_str(),"結果",MB_OK);
            151 
            152     return 0;
            153 }
            posted on 2011-12-28 13:59 shaker(太子) 閱讀(989) 評論(0)  編輯 收藏 引用 所屬分類: C++
            国产一区二区精品久久岳| 麻豆av久久av盛宴av| 久久精品九九亚洲精品天堂| 久久99国产精品二区不卡| 国产精品无码久久综合网| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久久久一区二区三区| 国内精品免费久久影院| 久久精品国产乱子伦| 久久最近最新中文字幕大全| 亚洲国产天堂久久综合| 99久久99久久久精品齐齐| 久久久久99精品成人片三人毛片| 欧美日韩精品久久久免费观看| 久久99热只有频精品8| 久久国产一片免费观看| 99久久久精品免费观看国产| 久久综合久久综合亚洲| 中文字幕久久欲求不满| 久久丫精品国产亚洲av不卡| 亚洲国产精品无码久久九九| 99久久99久久精品国产片果冻| 亚洲国产精品无码久久久不卡| 久久本道综合久久伊人| 精品国产乱码久久久久久郑州公司| 亚洲国产成人久久精品99| 久久久青草青青亚洲国产免观| 国产亚洲美女精品久久久2020| 久久久噜噜噜久久| 精品久久人人爽天天玩人人妻| 久久久久久综合一区中文字幕| 久久精品中文无码资源站| 亚洲成色WWW久久网站| 久久久久亚洲AV成人网人人网站| avtt天堂网久久精品| 国产一区二区精品久久| 99久久久精品| 女人香蕉久久**毛片精品| 久久99精品久久久久久| 久久综合狠狠色综合伊人| 亚洲国产成人久久精品影视|