<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[用c++写的小工具，用来写文件恢复企业通讯录，员工名录的详细信息。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 17 Mar 2008 06:12:11 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	//该程序通过mysql数据库得到path，然后通过函数GetUserDetailFilename得到user_info?.conf ? 里面的数字，然后配合mysql数据库里面取得的内容写入到文本中，修复rpc造成的影响让webmail的企业通讯录下员工名录得以正常查看任何一个用户的详细信息！xiangdong2@staff.sina.com.cn<br/>//测试enterpriseid=100334;<br/>//CC -o user_info_mysql.cgi user_info_mysql.cpp -L/usr/local/lib/mysql -lmysqlclient -I/usr/local/include<br/>#include &lt;fstream&gt;<br/>#include &lt;iostream&gt;<br/>#include &lt;iostream&gt;<br/>#include &lt;fcntl.h&gt;<br/>#include &lt;unistd.h&gt;<br/>#include &lt;sys/types.h&gt;<br/>#include &lt;sys/uio.h&gt;<br/>#include &lt;math.h&gt;<br/>#include &quot;/usr/local/mysql/include/mysql/mysql.h&quot;<br/>const char mysqlServer[20] = &quot;10.88.15.114&quot;;<br/>const char user[20]=&quot;web&quot;;<br/>const char password[20]=&quot;sinatest&quot;;<br/>const char database[20]=&quot;enterprise&quot;;<br/>unsigned&nbsp;&nbsp;int port=3306;<br/>#define DETAILFILE_NUM&nbsp;&nbsp;10<br/>static int GetUserDetailFilename(const char *email, char *filename, const unsigned int size=1);<br/>char path[1024];<br/>char ent_address[21]=&quot;/ent_address/&quot;;<br/>char filename[100];<br/>char&nbsp;&nbsp;file_path_del[1024];<br/>char buffer[1024],buffer1[1024],buffer2[1024],buffer3[1024],buffer4[1024],buffer5[1024],buffer6[1024],buffer7[1024],buffer8[1024],buffer9[1024];<br/>using namespace std;<br/>int main(int argc,char* argv[])<br/>{<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;MYSQL myData;<br/>&nbsp;&nbsp;MYSQL_RES *res;<br/>&nbsp;&nbsp;MYSQL_FIELD *fd;<br/>&nbsp;&nbsp;MYSQL_ROW row;<br/>&nbsp;&nbsp;int i,j,rowCount = 0,colCount = 0;<br/>&nbsp;&nbsp;string query=&quot;select path from enterprise where enterpriseid=&quot;;<br/>&nbsp;&nbsp;string query2 = &quot;select email,realname,tel,mobile,address,office,enter_time,num,dept,flag from enterprisemail_info where enterpriseid=&quot;;<br/>&nbsp;&nbsp;if (argc &lt; 2) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;usage:&nbsp;&nbsp;请输入enterprise库enterprise表里面企业id（enterpriseid? Such As:./user_info_mysql.cgi 100334）&#92;n&quot;, argv[0]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;query+=argv[1];<br/>&nbsp;&nbsp;query2+=argv[1];<br/><br/>&nbsp;&nbsp;mysql_init( &amp;myData );<br/>&nbsp;&nbsp;if(!mysql_real_connect( &amp;myData, mysqlServer, user, password, database,port,NULL,0))<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;connect mysql error!&#92;n&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;if( mysql_query(&amp;myData, query.c_str()) != 0 )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;printf(&quot;query error!&#92;n&quot;);<br/>&nbsp;&nbsp;return 0;<br/>&nbsp;&nbsp;}else{<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;mysql query run ok!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;res = mysql_store_result( &amp;myData );<br/>&nbsp;&nbsp;row = mysql_fetch_row( res );<br/>&nbsp;&nbsp;strcpy(path,row[0]);<br/>&nbsp;&nbsp;//cout &lt;&lt; row[0]&lt;&lt;path;取得path然后加入ent_address/<br/>&nbsp;&nbsp;strcat(path,ent_address);<br/>&nbsp;&nbsp;//cout &lt;&lt; path&lt;&lt;&quot;&#92;n&quot;;<br/>&nbsp;&nbsp;if( mysql_query(&amp;myData, query2.c_str()) != 0 )<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;printf(&quot;query error!&#92;n&quot;);<br/>&nbsp;&nbsp;return 0;<br/>&nbsp;&nbsp;}else{<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;mysql query run ok!&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;res = mysql_store_result( &amp;myData );<br/>&nbsp;&nbsp;rowCount = (int) mysql_num_rows( res );<br/>&nbsp;&nbsp;colCount = (int) mysql_num_fields( res );<br/>&nbsp;&nbsp;//cout &lt;&lt; &quot;&#92;t&quot;&lt;&lt;colCount&lt;&lt;&quot;&#92;t&quot;&lt;&lt;rowCount&lt;&lt;&quot;&#92;n&quot;;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;char num[2];<br/>&nbsp;&nbsp;for(i=0;i&lt;=10;i++){//构造从user_info0.conf to user_info10.conf 路径然后del掉他们，为下面从数据库取写做准备<br/><br/>&nbsp;&nbsp;strcpy(file_path_del,path);<br/>&nbsp;&nbsp;strcat(file_path_del,&quot;user_info&quot;);<br/>&nbsp;&nbsp;sprintf(num,&quot;%d&quot;,i);<br/>&nbsp;&nbsp;strcat(file_path_del,num);<br/>&nbsp;&nbsp;strcat(file_path_del,&quot;.conf&quot;);<br/>&nbsp;&nbsp;if( remove(file_path_del) != 0 )//删除文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &quot;Error deleting &quot;&lt;&lt; file_path_del &lt;&lt;&quot; file, &#92;t Because it is not exit! But it is still Ok...&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &quot;File&quot; &lt;&lt;file_path_del&lt;&lt;&quot; successfully deleted&#92;n&quot;;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;for(i = 0; i &lt; rowCount; i++)<br/>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;row = mysql_fetch_row( res );<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt;colCount;j++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer,row[0]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer1,row[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer2,row[2]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer3,row[3]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer4,row[4]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer5,row[5]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer6,row[6]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer7,row[7]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer8,row[8]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(buffer9,row[9]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char* p = strstr(buffer,&quot;@&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;*p=0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//取@前面的<br/>&nbsp;&nbsp;&nbsp;&nbsp;const char *uid;<br/>&nbsp;&nbsp;&nbsp;&nbsp;uid=buffer;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if(GetUserDetailFilename(uid, filename, 100)&lt;0)//获取目录位置<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&quot;GetUserDetailFilename() erro...&quot;;&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//字段数循环<br/>&nbsp;&nbsp;&nbsp;&nbsp;char file_path[1024];<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(file_path,path);<br/>&nbsp;&nbsp;&nbsp;&nbsp;strcat(file_path,filename);//得到文件的完整的path路径<br/>&nbsp;&nbsp;&nbsp;&nbsp;//cout&lt;&lt;&quot;file_path=&quot;&lt;&lt;file_path&lt;&lt;&quot;&#92;n&#92;n&quot;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//write file <br/>&nbsp;&nbsp;&nbsp;&nbsp;ofstream fout(file_path,ios_base::app);<br/>&nbsp;&nbsp;&nbsp;&nbsp;fout &lt;&lt;&quot;[USER:&quot;&lt;&lt;buffer&lt;&lt;&quot;]&#92;n&quot;&lt;&lt;&quot;EMAIL=&quot;&lt;&lt;buffer&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;REALNAME=&quot;&lt;&lt;buffer1&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;TEL=&quot;&lt;&lt;buffer2&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;MOBILE=&quot;&lt;&lt;buffer3&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;ADDRESS=&quot;&lt;&lt;buffer4&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;OFFICE=&quot;&lt;&lt;buffer5&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;ENTER_TIME=&quot;&lt;&lt;buffer6&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;NUM=&quot;&lt;&lt;buffer7&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;DEPT=&quot;&lt;&lt;buffer8&lt;&lt;&quot;&#92;n&quot;&lt;&lt;&quot;FLAG=&quot;&lt;&lt;buffer9&lt;&lt;&quot;&#92;n&quot;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;fout.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(file_path, 0, 1024);//清空该变量 清空其它字段缓存<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer1, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer2, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer3, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer4, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer5, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer6, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer7, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer8, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(buffer9, 0, 1024);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;}//条目数<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;cout &lt;&lt;&quot;&#92;n&#92;n&#92;nVery good ，The task&nbsp;&nbsp;finished all right!&#92;t goodbye...&#92;n&#92;n&#92;n&quot;;<br/><br/>}<br/><br/><br/><br/><br/>int GetUserDetailFilename(const char *email, char *filename, const unsigned<br/>int size)<br/>{<br/>&nbsp;&nbsp;if(!email &#124;&#124; !filename)return -1;<br/>&nbsp;&nbsp;int t=0, n;<br/>&nbsp;&nbsp;for(int i=0; i&lt;strlen(email); i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;t+=email[i];<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;n = (int)fmod(t, DETAILFILE_NUM)+1;<br/>&nbsp;&nbsp;if(snprintf(filename, size, &quot;user_info%d.conf&quot;, n)&gt;=size)return -1;<br/>&nbsp;&nbsp;return 0;<br/>}<br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 用c++写的小工具，用来写文件恢复企业通讯录，员工名录的详细信息。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>