• <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(太子) 閱讀(988) 評論(0)  編輯 收藏 引用 所屬分類: C++
            国产午夜精品久久久久免费视 | 青青久久精品国产免费看| 久久精品国产亚洲AV麻豆网站 | 7777久久亚洲中文字幕| 国产精品欧美久久久天天影视| 亚洲午夜久久久久久久久电影网 | 国产精品久久久久…| 嫩草影院久久国产精品| 91精品国产91热久久久久福利| 亚洲?V乱码久久精品蜜桃| 亚洲av日韩精品久久久久久a| 久久A级毛片免费观看| 99久久这里只精品国产免费| 久久妇女高潮几次MBA| 嫩草影院久久国产精品| 伊人久久大香线蕉综合影院首页| 青青草国产成人久久91网| 久久久久99精品成人片牛牛影视| 中文字幕久久精品| 久久久精品国产Sm最大网站| 精品久久久久久国产潘金莲| 久久这里都是精品| 一本一道久久综合狠狠老| 久久人与动人物a级毛片| 欧美精品福利视频一区二区三区久久久精品 | 久久香蕉国产线看观看精品yw| 久久亚洲天堂| 色欲久久久天天天综合网| 久久99国产精品久久99小说| 久久www免费人成看片| 精品国产乱码久久久久久1区2区| 久久一日本道色综合久久| 熟妇人妻久久中文字幕| 97精品国产97久久久久久免费| 久久福利片| 狠狠干狠狠久久| 久久久久久曰本AV免费免费| 日韩一区二区久久久久久| 亚洲国产成人精品无码久久久久久综合 | 亚洲AV成人无码久久精品老人 | 亚洲精品美女久久久久99|