C语言一些工具类函数 code

这个博客分享了一组C语言的工具类函数,包括FTP、数据库连接、日志记录、文件读写、字符串处理、文件操作等实用功能。例如,提供函数用于FTP文件上传下载、连接Oracle数据库、按行读取文件、转换字符串为大写等。这些函数方便开发者在C语言项目中快速实现常见任务。

一些可公布的工具类代码

tool.h
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

# pragma  once 

#ifndef _TOOL_H

#define _TOOL_H

//bizware  kkf2

#define IP "10.0.0.0"                //在一台计算机上测试,IP为本地回送地址

#define PORT 48018                    //注意:客户端设置通信的端口 = 服务端的端口

//FTP

#define S_FTPUSER "UUU"

#define S_FTPPWD "******"

#define S_REMOTE_DIR "/home/weblogic/download"

#define S_DOWNLOAD_LOCALHOST_PATH "E:\\FTP\\"  //需在E盘创建 FTP 文件夹

 

 

//DB  Oracle

#define DB_USERNAME     "XXX";

#define DB_PASSWORD     "******";

#define DB_IP           "10.0.0.0";

#define DB_PORT "1521";

#define DB_SID "orcl";

 

 

 

//打印日志

void __stdcall T_SaveLog_KF(const char *LogBuff);

//打印日志

void __stdcall Fprintf_Log(const char *LogBuff);

int __stdcall GetTime_My(char *buf);

//按行读取整个文件

int __stdcall ReadFile(const char *path, char * pRead);

//读取文件几行

int __stdcall Read_File_Rows(FILE *fp, char * pReadBuf, long startRow, long rows);

//Ftp下载文件

void FtpDownLoadFile(char* address, char* username, char* password, char* ftp_path, char* remote_file_name, char* local_path_file);

//Ftp下载文件  char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

void FtpDownLoadFile(char* address, char* username, char* password, char* ftp_path, char* remote_file_name, char* local_path_file, char* flag_Tips);

//上传文件

void FtpUpLoadFile();

//删除磁盘文件

int remove_disk_file(const char* Path);

//删除磁盘文件 char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

int remove_disk_file(const char* Path, char* flag_Tips);

//转换成大写

char * charToUPs(char* base);

//连接oracle 数据库

bool connect_oracl();

//关闭连接oracle 数据库

bool adoclose();

//执行sql

_RecordsetPtr AdoExucute(char* sqlStr);

//获取结果集

void getRecordResult(_RecordsetPtr PRecord);

/********************************

根据英文分号打断sql 逐条执行

********************************/

int AdoExucuteByList(char* pReadBuf);

//int __stdcall ReadSqlFile(const char *path_file, char * pReadBuf, char * line_notes_flag); //读取文件所有内容并舍弃包含标识的行数据

//读取文件所有内容并将包含标识的行数据 从标识处接断舍弃

int __stdcall ReadSqlFileTok(const char *path_file, char * pReadBuf, char *line_notes_flag);

//读取文件所有内容并将包含标识的行数据 从标识处接断舍弃  char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

int __stdcall ReadSqlFileTok(const char *path_file, char * pReadBuf, char *line_notes_flag, char* flag_Tips);

//获取选择文件路径

const CString chose_file_path();

int socket_send(CString jsons, char *rcv_show);

//发送字符串到服务器 char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

int socket_send(CString jsons, char *rcv_show, char* flag_Tips);

//读取文件内容返回查找的数据行 可返回多行数据

char* __stdcall ReadFileSearch(const char* path_file, char* pReadBuf, char* search_srting);

//读取文件内容返回查找的数据行 可返回多行数据 char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

char* __stdcall ReadFileSearch(const char* path_file, char* pReadBuf, char* search_srting, char* flag_Tips);

//替换字符串

char* str_replace(char* str, const char *oldstr, const char *newstr);

//判断文件路径是否存在 或者权限_access();

int file_exists(const char *PATH, int iMode);

//判断参数是否是数字组成

bool IsNumber(const char* input);

//判断参数是否是数字组成

bool IsNumber2(const char* input);

//统计字符串出现次数

long Count_String(const char * Original_Str, const char * Finded_Str);

//统计字符出现次数

long Count_Char(const char * Original_Str, int C);

//获取windows系统进程号 线程号

CString Get_PID_UPD_AfxMessageBox(char * msg_Tips);

 

 

/**********************************************************************

拼接sql字符串

char* key_value[][2]

/**********************************************************************/

char* sqladd(char* key_value[][2], char* add_sql);

/**********************************************************************

字符串转数字  long double

**********************************************************************/

long double Atolongdouble(char* a);

char* AtolongdoubleX100(char* A);

//复制到剪切板

void CopyCStringToClipboard(CString str);

/**************************************

 将整个文件复制到剪贴板,注意是文件不是文本内容

 CopyFileToClipboard("D:\\user.txt");

**************************************/

int CopyFileToClipboard(char szFileName[]);

 

 

 

#endif

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑




tool.cpp
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

#pragma  once 

#include"stdafx.h"

#include "sys/stat.h"

#include "tools.h"

 

 

//#define IP "8.8.8.8"                //在一台计算机上测试,IP为本地回送地址

//#define PORT 80                    //注意:客户端设置通信的端口 = 服务端的端口

 

 

//#pragma warning(suppress : 4996)

#pragma warning(disable : 4996)

#define LOG_FILES_MAX_SIZE 500*1024*1024  //100M

#define T_LOG_XC

#define LOG_NAME1  "./SQLOG.text"

void __stdcall T_SaveLog_KF(const char *LogBuff) //打印日志

{

#if defined(T_LOG_XC)

FILE *fp = NULL;

struct stat buf;

 

 

int iRet = stat(LOG_NAME1, &buf);

if (iRet == 0)

{

if (buf.st_size > LOG_FILES_MAX_SIZE)

{

remove(LOG_NAME1);

}

 

 

}

 

 

fp = fopen(LOG_NAME1, "a+");

if (fp == NULL)

{

return;

}

char cTimeBuf[20] = "";

GetTime_My(cTimeBuf); //获取时间

fprintf(fp, "时间 %s   ", cTimeBuf);

fprintf(fp, "%s\n", LogBuff);

fclose(fp);

if (fp) {

fclose(fp);

}

#endif

return;

}

 

 

 

 

 

 

#define T_LOG_XC

#define LOG_NAME  "./Log_printf.text"

void __stdcall Fprintf_Log(const char *LogBuff) //打印日志 保存内容为ANSI

{

#if defined(T_LOG_XC)

FILE *fp = NULL;

struct stat buf;

 

 

int iRet = stat(LOG_NAME, &buf);

if (iRet == 0)

{

if (buf.st_size > LOG_FILES_MAX_SIZE)

{

remove(LOG_NAME);

}

 

 

}

 

 

fp = fopen(LOG_NAME, "a+");

if (fp == NULL)

{

return;

}

char cTimeBuf[20] = "";

GetTime_My(cTimeBuf); //获取时间

fprintf(fp, "时间 %s   ", cTimeBuf);

fprintf(fp, "%s\n", LogBuff);

fclose(fp);

if (fp) {

fclose(fp);

}

#endif

return;

}

 

 

/*

buf[20]

*/

int __stdcall GetTime_My(char *buf)

{

// LPSYSTEMTIME systime;

// GetCurrentTime()

SYSTEMTIME SysTime, SysTime2;

GetSystemTime(&SysTime);

GetLocalTime(&SysTime2);

 

 

memset(buf, 0, 20);

sprintf(buf, (const char *)"%d-%02d%02d %02d:%02d:%02d", (unsigned int)SysTime.wYear, (unsigned int)SysTime.wMonth, (unsigned int)SysTime.wDay, (unsigned int)SysTime.wHour + 8, (unsigned int)SysTime.wMinute, (unsigned int)SysTime.wSecond);

return 0;

}

 

 

 

 

/**

读取文件

**/

#include "stdio.h" 

#define SQL_INFO_FILE  "./SQL_INFO_FILE.text"

int __stdcall ReadFile(const char *path, char * pReadBuf)

{

FILE *fp = NULL;

char str[BUFSIZ * 5];

if ((fp = fopen(SQL_INFO_FILE, "r")) == NULL) {

printf("cannot open file/n"); exit(1);

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

printf("%s", str);

strcat(pReadBuf, str);

}

}

fclose(fp);

return 0;

}

 

 

/**

读取文件一行数据

*fp  文件指针

startRow  起始行

rows  读取行数

**/

int __stdcall Read_File_Rows(FILE *fp, char * pReadBuf, long startRow, long rows)

{

char str[BUFSIZ];

long count = 0L;

if (!fp)

{

Fprintf_Log("文件指针为空!不能读取一行数据");

return -1;

}

 

 

while (!feof(fp)) {

if (count = fgets(str, sizeof(str), fp) != NULL) {  //读取一行数据

printf("%s", str);

//pReadBuf = *pReadBuf + str;

strcat(pReadBuf, str);

}

}

fclose(fp);

return 0;

}

 

 

 

 

 

 

#include <winsock2.h>  

#include <winsock.h>

#include <stdio.h>  

#include <WS2tcpip.h>

#pragma comment(lib,"ws2_32.lib")    //把ws2_32.lib加到Link页的连接库  

 

 

int socket(CString jsons)

{

 

 

#define BUFFER_SIZE  BUFSIZ*20        //数据发送缓冲区大小

//struct hostent *pURL=NULL;

char rcvBuf[BUFFER_SIZE]; //buf数组存放客户端发送的消息  

char* sndBuf = "000109{\"busiid\":\"XXXX\"}";//buf数组存放客户端发送的消息

 

char * tempBuf = NULL;

 

if (!jsons.IsEmpty()) {

tempBuf = (char*)(LPCTSTR)(jsons);

long jsonLen = strlen(tempBuf);

char buffer[BUFFER_SIZE] = { '\0' };

sprintf_s(buffer, sizeof(buffer), "%06d%s", jsonLen, tempBuf);

 

 

sndBuf = buffer;

 

 

}

 

 

//用于输入字符自增变量

int i = 0;

while (i < 3)

{

i++;

printf("C:\\Socket\\Client>");

memset(rcvBuf, '\0', sizeof(rcvBuf));

WSADATA WSAData;

if (WSAStartup(MAKEWORD(2, 0), &WSAData) == SOCKET_ERROR)  //WSAStartup()函数对Winsock DLL进行初始化

{

printf("Socket initialize fail!\n");

continue;

}

/*

* windows下使用socket必须用WSAStartup初始化,否则不能调用

*/

if (WSAStartup(MAKEWORD(2, 2), &WSAData)) //加载socket 2.2通讯协议库

{

printf("WSA failed\n");

return -1;

}

 

 

 

 

//socket(PF_INET, SOCK_STREAM, 0); //建立socket通讯

SOCKET sock;                                            //客户端进程创建套接字

//if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)TCP 方式连接

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)

{

printf("Socket create fail!\n");

WSACleanup();

continue;

}

 

 

int nNetTimeout = 60000 * 5; //60*3秒

//发送时限

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int));

//接收时限

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int));

 

#pragma warning(disable : 4996)

struct hostent* host_addr = gethostbyname(IP);

sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons((unsigned short)PORT);

sin.sin_addr.s_addr = *((unsigned long*)*host_addr->h_addr_list);

 

 

if (connect(sock, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  //调用connect()函数,向服务器进程发出连接请求  

{

printf("Connect fail!\n");

closesocket(sock);

WSACleanup();

continue;

}

int ret = send(sock, sndBuf, BUFFER_SIZE, 0);                 //向服务器发送数据 

ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

if (ret > 0 && strlen(rcvBuf) > 0) {

CString strMsg;

strMsg.Format(_T("发送信息:%s\n返回信息:\n %s"), sndBuf, rcvBuf);

AfxMessageBox(strMsg);

}

 

 

//ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

closesocket(sock);                             //关闭套接字

WSACleanup();                                //终止对Winsock DLL的使用,并释放资源

return 0;

}

return 0;

}

 

 

int socket_send(CString jsons, char *rcv_show)

{

 

 

memset(rcv_show, '\0', sizeof(rcv_show));

char rcvBuf[BUFFER_SIZE]; //buf数组存放客户端发送的消息  

char* sndBuf = "000109{\"busiid\":\"XXXX\"}}";//buf数组存放客户端发送的消息

 

 

char * tempBuf = NULL;

 

 

if (!jsons.IsEmpty()) {

tempBuf = (char*)(LPCTSTR)(jsons);

long jsonLen = strlen(tempBuf);

char buffer[BUFFER_SIZE] = { '\0' };

sprintf_s(buffer, sizeof(buffer), "%06d%s", jsonLen, tempBuf);

 

sndBuf = buffer;

 

 

}

 

 

char check_tran_code[][50] = { "\"tran_code\":\"201\"","\"tran_code\":\"202\"","\"tran_code\":\"20408\"","\"tran_code\":\"20402s\"","\"tran_code\":\"20403s\"","\"tran_code\":\"20402S\"","\"tran_code\":\"20403S\"" };

size_t length = sizeof(check_tran_code) / sizeof(check_tran_code[0]); // 数组长度对于其他类型的数组,都可以用字符数组的第三种方

for (size_t i = 0; i < length; i++)

{

if (strstr(sndBuf, check_tran_code[i])) {

CString strMsg;

strMsg.Format(_T("选择是否发送执行?\nIP [ %s:%d ]\n发送消息: %s\n"), IP, PORT, (LPCTSTR)sndBuf);

if (IDNO == AfxMessageBox(strMsg, MB_YESNO)) {

AfxMessageBox("结束执行!");

return -2;

}

}

}

//用于输入字符自增变量

int i = 0;

while (i < 3)

{

i++;

printf("C:\\Socket\\Client>");

memset(rcvBuf, '\0', sizeof(rcvBuf));

WSADATA WSAData;

if (WSAStartup(MAKEWORD(2, 0), &WSAData) == SOCKET_ERROR)  //WSAStartup()函数对Winsock DLL进行初始化

{

printf("Socket initialize fail!\n");

continue;

}

/*

* windows下使用socket必须用WSAStartup初始化,否则不能调用

*/

if (WSAStartup(MAKEWORD(2, 2), &WSAData)) //加载socket 2.2通讯协议库

{

printf("WSA failed\n");

return -1;

}

 

 

 

 

//socket(PF_INET, SOCK_STREAM, 0); //建立socket通讯

SOCKET sock;                                            //客户端进程创建套接字

//if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)TCP 方式连接

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)

{

printf("Socket create fail!\n");

WSACleanup();

continue;

}

 

 

int nNetTimeout = 60000 * 5; //60*3秒

//发送时限

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int));

//接收时限

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int));

 

 

 

 

#pragma warning(disable : 4996)

struct hostent* host_addr = gethostbyname(IP);

sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons((unsigned short)PORT);

sin.sin_addr.s_addr = *((unsigned long*)*host_addr->h_addr_list);

 

 

if (connect(sock, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  //调用connect()函数,向服务器进程发出连接请求  

{

printf("Connect fail!\n");

closesocket(sock);

WSACleanup();

continue;

}

int ret = send(sock, sndBuf, BUFFER_SIZE, 0);                 //向服务器发送数据 

//循环读取

ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

 

 

if (strlen(rcvBuf) > 0) {

CString strMsg;

strMsg.Format(_T("发送[ %s:%d ]信息:%s\n返回信息:\n %s"), IP, PORT, sndBuf, rcvBuf);

Fprintf_Log(strMsg);

AfxMessageBox(strMsg);

memcpy(rcv_show, rcvBuf, strlen(rcvBuf));

 

 

}

//ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

closesocket(sock);                             //关闭套接字

WSACleanup();                                //终止对Winsock DLL的使用,并释放资源,以备下一次使用

return 0;

}

return 0;

}

 

 

// char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

int socket_send_back(CString jsons, char *rcv_show, char* flag_Tips)

{

//#define BUFFER_SIZE 1024*5           //数据发送缓冲区大小

//struct hostent *pURL=NULL;

 

 

memset(rcv_show, '\0', sizeof(rcv_show));

char rcvBuf[BUFFER_SIZE]; //buf数组存放客户端发送的消息  

char* sndBuf = "000109{\"busiid\":\"XXXX\"}}";//buf数组存放客户端发送的消息

 

 

char * tempBuf = NULL;

 

 

if (!jsons.IsEmpty()) {

tempBuf = (char*)(LPCTSTR)(jsons);

long jsonLen = strlen(tempBuf);

char buffer[BUFFER_SIZE] = { '\0' };

sprintf_s(buffer, sizeof(buffer), "%06d%s", jsonLen, tempBuf);

 

 

sndBuf = buffer;

 

 

}

 

char check_tran_code[][50] = {"\"tran_code\":\"201\"","\"tran_code\":\"202\"","\"tran_code\":\"20408\"","\"tran_code\":\"20402s\"","\"tran_code\":\"20403s\"","\"tran_code\":\"20402S\"","\"tran_code\":\"20403S\"" };

size_t length = sizeof(check_tran_code) / sizeof(check_tran_code[0]); // 数组长度对于其他类型的数组,都可以用字符数组的第三种方

for (size_t i = 0; i < length; i++)

{

if (strstr(sndBuf, check_tran_code[i])) {

int j = 3;

while (j--) {

CString strMsg;

strMsg.Format(_T("资金交易选择是否发送执行?还需要%d次确认!\nIP [ %s:%d ]\n发送消息: %s\n"), j,IP, PORT, (LPCTSTR)sndBuf);

if (IDNO == AfxMessageBox(strMsg, MB_YESNO)) {

AfxMessageBox("结束执行!");

return -2;

}

}

Sleep(1000);

}

}

//用于输入字符自增变量

int i = 0;

while (i < 2)

{

i++;

printf("C:\\Socket\\Client>");

memset(rcvBuf, '\0', sizeof(rcvBuf));

WSADATA WSAData;

if (WSAStartup(MAKEWORD(2, 0), &WSAData) == SOCKET_ERROR)  //WSAStartup()函数对Winsock DLL进行初始化

{

printf("Socket initialize fail!\n");

continue;

}

/*

* windows下使用socket必须用WSAStartup初始化,否则不能调用

*/

if (WSAStartup(MAKEWORD(2, 2), &WSAData)) //加载socket 2.2通讯协议库

{

printf("WSA failed\n");

return -1;

}

 

 

 

 

//socket(PF_INET, SOCK_STREAM, 0); //建立socket通讯

SOCKET sock; //客户端进程创建套接字

 

 

//if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)TCP 方式连接

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)

{

printf("Socket create fail!\n");

WSACleanup();

continue;

}

 

 

 

 

int nNetTimeout = 60000 * 5; //60*3秒

//发送时限

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int));

//接收时限

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int));

 

 

#pragma warning(disable : 4996)

struct hostent* host_addr = gethostbyname(IP);

sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons((unsigned short)PORT);

sin.sin_addr.s_addr = *((unsigned long*)*host_addr->h_addr_list);

 

 

if (connect(sock, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  //调用connect()函数,向服务器进程发出连接请求  

{

printf("Connect fail!\n");

closesocket(sock);

WSACleanup();

continue;

}

int ret = send(sock, sndBuf, strlen(sndBuf) + 1, 0);                 //向服务器发送数据 

//循环读取

ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

if (strlen(rcvBuf) > 0) {

CString strMsg;

strMsg.Format(_T("发送[ %s:%d ]信息:%s\n返回信息:\n %s"), IP, PORT, sndBuf, rcvBuf);

Fprintf_Log(strMsg);

if (strcmp(flag_Tips, "FALSE") != 0) {  //flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

AfxMessageBox(strMsg);

}

memcpy(rcv_show, rcvBuf, strlen(rcvBuf));

 

 

}

//ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

closesocket(sock);                             //关闭套接字

WSACleanup();                                //终止对Winsock DLL的使用,并释放资源,以备下一次使用

return 0;

}

return 0;

}

 

 

// char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

int socket_send(CString jsons, char *rcv_show, char* flag_Tips)

{

//#define BUFFER_SIZE 1024*5           //数据发送缓冲区大小

//struct hostent *pURL=NULL;

 

 

memset(rcv_show, '\0', sizeof(rcv_show));

char rcvBuf[BUFFER_SIZE]; //buf数组存放客户端发送的消息  

char* sndBuf = "000109{\"busiid\":\"XXXX\"}}";//buf数组存放客户端发送的消息

 

 

char * tempBuf = NULL;

 

 

if (!jsons.IsEmpty()) {

tempBuf = (char*)(LPCTSTR)(jsons);

long jsonLen = strlen(tempBuf);

char buffer[BUFFER_SIZE] = { '\0' };

sprintf_s(buffer, sizeof(buffer), "%06d%s", jsonLen, tempBuf);

 

 

sndBuf = buffer;

 

 

}

 

 

char check_tran_code[][50] = { "\"tran_code\":\"201\"","\"tran_code\":\"202\"","\"tran_code\":\"20408\"","\"tran_code\":\"20402s\"","\"tran_code\":\"20403s\"","\"tran_code\":\"20402S\"","\"tran_code\":\"20403S\"" };

size_t length = sizeof(check_tran_code) / sizeof(check_tran_code[0]); // 数组长度对于其他类型的数组,都可以用字符数组的第三种方

for (size_t i = 0; i < length; i++)

{

if (strstr(sndBuf, check_tran_code[i])) {

int j = 3;

while (j--) {

CString strMsg;

strMsg.Format(_T("资金交易选择是否发送执行?还需要%d次确认!\nIP [ %s:%d ]\n发送消息: %s\n"), j, IP, PORT, (LPCTSTR)sndBuf);

if (IDNO == AfxMessageBox(strMsg, MB_YESNO)) {

AfxMessageBox("结束执行!");

return -2;

}

}

Sleep(500);

}

}

Sleep(1000);

//用于输入字符自增变量

int i = 0;

while (i < 2)

{

i++;

printf("C:\\Socket\\Client>");

memset(rcvBuf, '\0', sizeof(rcvBuf));

WSADATA WSAData;

if (WSAStartup(MAKEWORD(2, 0), &WSAData) == SOCKET_ERROR)  //WSAStartup()函数对Winsock DLL进行初始化

{

printf("Socket initialize fail!\n");

continue;

}

/*

* windows下使用socket必须用WSAStartup初始化,否则不能调用

*/

if (WSAStartup(MAKEWORD(2, 2), &WSAData)) //加载socket 2.2通讯协议库

{

printf("WSA failed\n");

return -1;

}

 

 

//socket(PF_INET, SOCK_STREAM, 0); //建立socket通讯

SOCKET sock; //客户端进程创建套接字

 

 

//if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)TCP 方式连接

if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)  //创建流套接字(与服务端保持一致)

{

printf("Socket create fail!\n");

WSACleanup();

continue;

}

 

 

 

 

int nNetTimeout = 60000 * 5; //60*3秒

//发送时限

setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&nNetTimeout, sizeof(int));

//接收时限

setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout, sizeof(int));

 

 

 

try

{

#pragma warning(disable : 4996)

struct hostent* host_addr = gethostbyname(IP);

sockaddr_in sin;

sin.sin_family = AF_INET;

sin.sin_port = htons((unsigned short)PORT);

sin.sin_addr.s_addr = *((unsigned long*)*host_addr->h_addr_list);

 

 

if (connect(sock, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  //调用connect()函数,向服务器进程发出连接请求  

{

printf("Connect fail!\n");

closesocket(sock);

WSACleanup();

continue;

}

int ret = send(sock, sndBuf, strlen(sndBuf) + 1, 0);                 //向服务器发送数据

if (ret <= 0)

{

CString strMsg;

int error = WSAGetLastError();

strMsg.Format(("发送套接字异常,请重试 错误码=[%d]", error));

AfxMessageBox(_T(strMsg));

}

//循环读取

ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

if (strlen(rcvBuf) > 0) {

CString strMsg;

strMsg.Format(_T("发送[ %s:%d ]信息:%s\n返回信息:\n %s"), IP, PORT, sndBuf, rcvBuf);

Fprintf_Log(strMsg);

if (strcmp(flag_Tips, "FALSE") != 0) {  //flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

AfxMessageBox(strMsg);

}

memcpy(rcv_show, rcvBuf, strlen(rcvBuf));

}

if (ret <= 0)

{

CString strMsg;

strMsg.Format(_T("连接异常,可能超时!!!"));

AfxMessageBox(strMsg);

Fprintf_Log(strMsg);

}

//ret = recv(sock, rcvBuf, sizeof(rcvBuf), 0);

closesocket(sock);                             //关闭套接字

WSACleanup();                                //终止对Winsock DLL的使用,并释放资源,以备下一次使用

return 0;

 

 

}

catch (...)

{

closesocket(sock);                             //关闭套接字

WSACleanup();                                //终止对Winsock DLL的使用,并释放资源,以备下一次使用

AfxMessageBox(_T("socket捕获异常,可能超时..."));

}

}

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <stdio.h>  

#include <windows.h>  

#include <wininet.h>  

#include <process.h>  

#include <afxinet.h>

#pragma comment(lib, "WININET.LIB")  

void FtpDownLoadFile_test()

{

// TODO: Add your control notification handler code here

CInternetSession * pInternetSession = NULL;

CFtpConnection     * pFtpConnection = NULL;

 

 

//建立连接

pInternetSession = new CInternetSession(AfxGetAppName());

 

 

//服务器的ip地址

CString strADddress = IP;

 

 

//用户名与密码

CString strUserName = S_FTPUSER;

CString strPwd = S_FTPPWD;

 

 

//服务器的目录

CString strDir = "/home/bizware/download";  //服务器中的Image目录下

  //若要设置为服务器的根目录,则使用"\\"就可以了

  //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了

pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd, 21);

 

 

//设置服务器的目录

bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);

 

 

if (bRetVal == false)

{

AfxMessageBox("目录设置失败");

 

 

return;

}

else

{

//把服务器002jpg下载到E盘

CString strLocalFile = "E:\\88109924099901100353_20190103_20190103.txt";

CString strRemoteFile = "88109924099901100353_20190103_20190103.txt";

 

 

BOOL ret = pFtpConnection->GetFile(strRemoteFile, strLocalFile);

if (ret)

{

AfxMessageBox(_T("文件下载成功"));

}

}

 

 

//释放资源

if (NULL != pFtpConnection)

{

pFtpConnection->Close();

 

 

delete pFtpConnection;

 

 

pFtpConnection = NULL;

}

 

 

 

 

if (NULL != pInternetSession)

{

delete pInternetSession;

 

 

pInternetSession = NULL;

}

}

 

 

#include <stdio.h>  

#include <windows.h>  

#include <wininet.h>  

#include <process.h>  

#include <afxinet.h>

#pragma comment(lib, "WININET.LIB")  

/*

char* address IP

char* username 用户

char* password 密码

char* ftp_path 远程路径

char* remote_file_name 远程文件名

char* local_path_file 本地文件目录

*/

void FtpDownLoadFile(char* address, char* username, char* password, char* ftp_path, char* remote_file_name, char* local_path_file)

{

// TODO: Add your control notification handler code here

CInternetSession * pInternetSession = NULL;

CFtpConnection     * pFtpConnection = NULL;

 

 

//建立STP/SFTP连接  CInternetSession

pInternetSession = new CInternetSession(AfxGetAppName());

 

 

 

//服务器的ip地址

CString strADddress = CString(address);

 

 

//用户名与密码

CString strUserName = CString(username);

CString strPwd = CString(password);

 

 

//服务器的目录

CString strDir = CString(ftp_path);  //服务器中的Image目录下

  //若要设置为服务器的根目录,则使用"\\"就可以了

  //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了

pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd, 21);

 

 

//设置服务器的目录

bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);

 

 

if (bRetVal == false)

{

AfxMessageBox("FTP 目录设置失败");

 

 

return;

}

else

{

//把服务器002jpg下载到E盘 // "E:\\88109924099901100353_20190103_20190103.txt";

CString strLocalFile = NULL;

strLocalFile.Format("E:\\%s", remote_file_name);

CString strRemoteFile = CString(remote_file_name);

if (strlen(local_path_file) > 0 || local_path_file != NULL) {

strLocalFile.Format("%s", local_path_file);

}

 

 

BOOL ret = pFtpConnection->GetFile(strRemoteFile, strLocalFile);

if (ret)

{

AfxMessageBox(_T("文件下载成功"));

}

else {

AfxMessageBox(_T("文件下载未成功"));

}

}

 

 

//释放资源

if (NULL != pFtpConnection)

{

pFtpConnection->Close();

 

 

delete pFtpConnection;

 

 

pFtpConnection = NULL;

}

 

 

 

 

if (NULL != pInternetSession)

{

delete pInternetSession;

 

 

pInternetSession = NULL;

}

}

 

 

#include <stdio.h>  

#include <windows.h>  

#include <wininet.h>  

#include <process.h>  

#include <afxinet.h>

#pragma comment(lib, "WININET.LIB")  

/*

char* address IP

char* username 用户

char* password 密码

char* ftp_path 远程路径

char* remote_file_name 远程文件名

char* local_path_file 本地文件目录

char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

*/

void FtpDownLoadFile(char* address, char* username, char* password, char* ftp_path, char* remote_file_name, char* local_path_file, char* flag_Tips)

{

// TODO: Add your control notification handler code here

CInternetSession * pInternetSession = NULL;

CFtpConnection     * pFtpConnection = NULL;

 

 

//建立STP/SFTP连接  CInternetSession

pInternetSession = new CInternetSession(AfxGetAppName());

 

 

//服务器的ip地址

CString strADddress = CString(address);

 

 

//用户名与密码

CString strUserName = CString(username);

CString strPwd = CString(password);

 

 

//服务器的目录

CString strDir = CString(ftp_path);  //服务器中的Image目录下

  //若要设置为服务器的根目录,则使用"\\"就可以了

  //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了

pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd, 21);

 

 

//设置服务器的目录

bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);

 

 

if (bRetVal == false)

{

AfxMessageBox("FTP 目录设置失败");

return;

}

else

{

//把服务器002jpg下载到E盘 // "E:\\88109924099901100353_20190103_20190103.txt";

CString strLocalFile = NULL;

strLocalFile.Format("E:\\%s", remote_file_name);

CString strRemoteFile = CString(remote_file_name);

if (strlen(local_path_file) > 0 || local_path_file != NULL) {

strLocalFile.Format("%s", local_path_file);

}

 

 

BOOL ret = pFtpConnection->GetFile(strRemoteFile, strLocalFile);

if (ret)

{

if (strcmp(flag_Tips, "FALSE") != 0) { // char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

AfxMessageBox(_T("文件下载成功"));

}

}

}

 

 

//释放资源

if (NULL != pFtpConnection)

{

pFtpConnection->Close();

 

 

delete pFtpConnection;

 

 

pFtpConnection = NULL;

}

 

 

 

 

if (NULL != pInternetSession)

{

delete pInternetSession;

 

 

pInternetSession = NULL;

}

}

 

 

 

 

 

 

void FtpUpLoadFile()

{

CInternetSession * pInternetSession = NULL;

CFtpConnection     * pFtpConnection = NULL;

 

 

//建立连接

pInternetSession = new CInternetSession(AfxGetAppName());

 

 

//服务器的ip地址

CString strADddress = "192.168.1.61";

 

 

//用户名与密码

CString strUserName = "test";

CString strPwd = "123456";

 

 

//服务器的目录

CString strDir = "\\Image";                //服务器中的Image目录下

  //若要设置为服务器的根目录,则使用"\\"就可以了

 

 

  //创建了一个CFtpConnection对象,之后就可以通过这个对象进行上传文件,下载文件了

pFtpConnection = pInternetSession->GetFtpConnection(strADddress, strUserName, strPwd);

 

 

//设置服务器的目录

bool bRetVal = pFtpConnection->SetCurrentDirectory(strDir);

 

 

if (bRetVal == false)

{

AfxMessageBox("目录设置失败");

 

 

return;

}

else

{

//把本地文件上传到服务器上

CString strLocalFile = "D:\\002.jpg";

CString strRemoteFile = "001.jpg";

 

 

pFtpConnection->PutFile(strLocalFile, strRemoteFile);

}

 

 

//释放资源

if (NULL != pFtpConnection)

{

pFtpConnection->Close();

 

 

delete pFtpConnection;

 

 

pFtpConnection = NULL;

}

 

 

if (NULL != pInternetSession)

{

 

 

delete pInternetSession;

 

 

pInternetSession = NULL;

}

}

 

 

 

 

 

 

 

 

/************************************************************************/

/* 删除磁盘文件 成功返回0 失败返回小于0                                                                     */

/************************************************************************/

#include <io.h>

int remove_disk_file(const char* Path)

{

//char *Path="./saveHTMLfile.html";

if (_access(Path, 0) == -1) {

char  buffer[200] = { '\0' };

wsprintf(buffer, "%s file does not exist!", Path);

Fprintf_Log(buffer);

AfxMessageBox(buffer, 0);

return -100;

};

if (!remove(Path)) {

Fprintf_Log("delete the file\r\n");

AfxMessageBox("delete the file\r\n", 0);

return 0;

 

 

}

else {

Fprintf_Log("Delete history file failed!");

AfxMessageBox("Delete history file failed!", 0);

return -1;

};

}

 

 

/************************************************************************/

/* 删除磁盘文件 成功返回0 失败返回小于0

char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

*/

/************************************************************************/

#include <io.h>

int remove_disk_file(const char* Path, char* flag_Tips)

{

//char *Path="./saveHTMLfile.html";

if (_access(Path, 0) == -1) {

char  buffer[200] = { '\0' };

wsprintf(buffer, "%s file does not exist!", Path);

Fprintf_Log(buffer);

if (strcmp(flag_Tips, "FALSE") != 0) {

AfxMessageBox(buffer, 0);

}

return -100;

};

if (!remove(Path)) {

Fprintf_Log("delete the file\r\n");

if (strcmp(flag_Tips, "FALSE") != 0) {

AfxMessageBox("delete the file\r\n", 0);

}

return 0;

 

 

}

else {

Fprintf_Log("Delete history file failed!");

if (strcmp(flag_Tips, "FALSE") != 0) {

AfxMessageBox("Delete history file failed!", 0);

}

return -1;

};

}

 

 

 

 

//转换成大写

char * charToUPs(char* base)

{

 

 

if (int length = strlen(base)) {

for (long i = 0; i < length; i++)

{

base[i] = toupper(base[i]);

}

 

 

}

return base;

}

 

 

//====================oracle===========

const long L_MAX_RECORDS = 50000; //最大处理数量

_ConnectionPtr m_pConnection; //连接对象 连接智能指针      如需要在其他文件使用必须什么成外部全局变量 用extern 修饰

_RecordsetPtr m_pRecordset;     //记录集对象 记录集智能指针  如需要在其他文件使用必须什么成外部全局变量 用extern 修饰

 

 

//连接

bool connect_oracl()

{

HRESULT hrt;

 

 

char* m_sUid = DB_USERNAME;

char* m_sPwd = DB_PASSWORD;

//char* m_sHost = "10.0.0.0";

char* m_sHost =DB_IP

char* m_sPort = DB_PORT

char* m_sSid = DB_SID

AfxMessageBox(m_sHost);

 

 

CString strConnect;

//x64

//strConnect.Format("Provider=OraOLEDB.Oracle.1;Password=%s;PersistSecurity Info=True;User ID=%s;DataSource=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s)) )(CONNECT_DATA = (SID = %s)))\"", m_sPwd, m_sUid, m_sHost, m_sPort, m_sSid);

strConnect.Format("Provider=OraOLEDB.Oracle.1;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = %s)));User Id=%s;Password=%s;", m_sHost, m_sPort, m_sSid, m_sUid, m_sPwd);

 

 

//x86

//strConnect="Provider=OraOLEDB.Oracle.1;Data Source=10.0.0.0:1521/orcl;User ID=XXXX;Password=XXXX;Unicode=True";

// CString connectionString = "Provider=MSDAORA.1;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.0)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)));User Id=XXXX;Password=XXXX;";

 

 

CString connectionString;

connectionString.Format("Provider=MSDAORA.1;Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = %s)));User Id=%s;Password=%s;", m_sHost, m_sPort, m_sSid, m_sUid, m_sPwd);

 

 

try

{

::CoInitialize(NULL);                                                  //初始化com环境(必须,否则提示异常)

//创建Connection对象的一个实例  

hrt = m_pConnection.CreateInstance(__uuidof(Connection)); //创建Connection对象

 

 

m_pConnection->Mode = adModeUnknown;

m_pConnection->ConnectionTimeout = 10;               // 设置连接超时10秒

m_pConnection->CommandTimeout = 5;

m_pConnection->Open(_bstr_t(LPCTSTR(connectionString)), "", "", adModeUnknown); //通过用户名、密码以及连接字符串连接数据库  

//Sleep(500);

//m_pConnection->CursorLocation = adUseClient;  //设置使用客户端连接

}

catch (_com_error e)

{

CString strMsg;

strMsg.Format(_T("错误描述:%s\n错误消息: %s"),

(LPCTSTR)e.Description(),

(LPCTSTR)e.ErrorMessage());

AfxMessageBox(strMsg);

return FALSE;

}

catch (...)

{

T_SaveLog_KF("数据库连接失败!");

AfxMessageBox("数据库连接失败!");

return FALSE;

}

 

 

AfxMessageBox("open Oracle ok!");

 

 

 

 

//查询数据库

m_pRecordset.CreateInstance(_uuidof(Recordset));

//_ConnectionPtr pConnection = NULL;

try

{

//执行命令

hrt = m_pRecordset->Open(_T("select * from tab"), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

//AfxMessageBox(hrt);

 

 

}

catch (_com_error e)

{

CString strMsg;

strMsg.Format(_T("错误描述:%s\n错误消息: %s"),

(LPCTSTR)e.Description(),

(LPCTSTR)e.ErrorMessage());

AfxMessageBox(strMsg);

return FALSE;

}

if (SUCCEEDED(hrt))

{

//AfxMessageBox("测试查询成功");

T_SaveLog_KF("测试查询成功");

 

 

}

else if (FAILED(hrt))

{

AfxMessageBox("测试查询失败,但连接成功");

T_SaveLog_KF("测试查询失败,但连接成功");

}

 

 

return TRUE;

}

/**

关闭连接

**/

bool adoclose()

{

 

 

try {

if (m_pConnection != NULL)

{

 

 

if (m_pRecordset != NULL)

m_pRecordset->Close();//关闭结果集  

m_pRecordset = NULL;

m_pConnection->Close();//关闭连接  

m_pConnection = NULL;

//::CoUninitialize();//卸载COM环境  

}

if (m_pConnection == NULL)

return TRUE;

else

return FALSE;

 

 

}

catch (_com_error e)

{

CString strMsg;

strMsg.Format(_T("错误描述:%s\n错误消息: %s"),

(LPCTSTR)e.Description(),

(LPCTSTR)e.ErrorMessage());

AfxMessageBox(strMsg);

return FALSE;

}

}

 

 

 

 

 

 

 

 

 

 

/*

C.也可通过Execute函数来获得结果集

*/

//获取结果集 

//执行SQL语句  

//执行SQL语句  

_RecordsetPtr AdoExucute(char* sqlStr)

{

 

 

char cTemp[BUFSIZ * 20] = { '\0' };

memset(cTemp, '\0', sizeof(cTemp));

memcpy(cTemp, sqlStr, (strlen(sqlStr) + 1)); //+1 是为了将字符串后面的'\0'字符结尾符放进来,去掉+1可能出现乱码

//转换成大写

charToUPs(cTemp);

if (strstr(cTemp, "DROP") || strstr(cTemp, "TRUNCATE") || strstr(cTemp, "DELETE") || strstr(cTemp, "|"))

{

AfxMessageBox("危险操作被取消!");

return NULL;

}

try

{

if (m_pConnection == NULL)

{

AfxMessageBox("请连接数据库,再操作!");

return NULL;

}

 

 

_variant_t RecordsAffected;//此次操作的记录数  

_RecordsetPtr PRecord;

T_SaveLog_KF("打开事物处理数据=========================");

m_pConnection->BeginTrans();//打开事物处理数据

T_SaveLog_KF(sqlStr);

//通过sql语句操作数据库并返回结果集指针

PRecord = m_pConnection->Execute(_bstr_t(sqlStr), &RecordsAffected, adCmdText);

/*

adCmdText 將 CommandText 視為指令的文字定義或預存程式

adCmdTable 將 CommandText 視為資料表名稱,其資料行由內部產生之 SQL 查詢所傳回

adCmdTableDirect 將 CommandText 視為資料表名稱,其資料行全部被傳回

adCmdStoredProc 將 CommandText 視為預存程序

AdCmdUnknown 預設值&#8231;未知的 CommandText 屬性的指令型態

AdCommandFile 將 CommandText 視為永久性 Recordset 的檔案名稱

AdExecuteNoRecords 表示 CommandText 是不傳回資料列的指令或預存程序 (例如只插入資料的指令)若擷取到任何資料列,它們將被放棄而不被傳回&#8231;它經常和 adCmdText 或 adCmdStoredProc 連合使用

 

 

*/

int IntRecords = RecordsAffected.intVal;

CString StrRecords = "";

if (IntRecords >= 0) {

StrRecords.Format("此次操作了 %d 条数据.", IntRecords); //IntRecords =-1 未操作数据 返回-1

AfxMessageBox(StrRecords);

}

T_SaveLog_KF((char*)(LPCTSTR)StrRecords);

if (IntRecords > L_MAX_RECORDS) {

m_pConnection->RollbackTrans(); //回滚

T_SaveLog_KF("操作数据量大于最大操作数量,回滚事物");

//PRecord->Cancel();

AfxMessageBox(_T("操作数据量大于最大操作数量,取消操作"));

return NULL;

}

m_pConnection->CommitTrans(); //提交事物

T_SaveLog_KF("提交事物(数据操作已提交!)=========================");

return PRecord;

}

catch (_com_error e)

{

CString strMsg;

m_pConnection->RollbackTrans(); //回滚事物

strMsg.Format(_T("回滚事物,错误描述:%s\n错误消息: %s"),

(LPCTSTR)e.Description(),

(LPCTSTR)e.ErrorMessage());

T_SaveLog_KF(strMsg);

AfxMessageBox(strMsg);

}

return NULL;

 

 

}

 

 

 

 

 

 

/**

获取结果集

**/

void getRecordResult(_RecordsetPtr PRecord)

{

if (PRecord == NULL || PRecord->GetadoEOF()) {

return;

}

 

 

_variant_t vIndex = (long)0;

_variant_t vCount = PRecord->GetCollect(vIndex);

CString  message;

message.Format("共有%d条记录", vCount.lVal);

AfxMessageBox(message);

 

 

long rowsCount = PRecord->GetRecordCount();

 

 

long  pageCount = PRecord->GetPageCount();

 

 

char* p = NULL;

 

 

try

{

while (!PRecord->GetadoEOF()) {

 

 

FieldsPtr   fds = PRecord->GetFields();

long countcolums = fds->GetCount();

CString column_name = NULL;

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

{

FieldPtr fieldptr = fds->GetItem(_variant_t(short(i)));

column_name = (LPCTSTR)fieldptr->GetName(); //获取列名字段名称

DataTypeEnum date_type = fieldptr->GetType();   //获取列数据类型

//HRESULT ht= fieldptr->get_Type(&date_type);

 

 

IID iid = fieldptr.GetIID();

_variant_t value = fieldptr->GetValue(); //获取列数据

_variant_t value_t = PRecord->GetCollect((LPCTSTR)column_name); //获取列数据

 

 

if (value_t.vt == VT_NULL) {

value = "";

value_t = "";

}

message.Format("%s == %s", (char*)(LPCTSTR)column_name, (LPCSTR)_bstr_t(value));

message.Format("%s == %s", (char*)(LPCTSTR)column_name, (LPCSTR)_bstr_t(value_t));

//message.Format("%s  %s  %s", (char*)(LPCTSTR)column_name, date_type, value.cVal);

AfxMessageBox(message);

}

PRecord->MoveNext();

}

}

catch (_com_error &e)

{

CString strMsg;

strMsg.Format(_T("错误描述:%s\n错误消息: %s"),

(LPCTSTR)e.Description(),

(LPCTSTR)e.ErrorMessage());

AfxMessageBox(strMsg);

}

 

 

 

 

}

 

 

/********************************

根据英文分号打断sql 逐条执行

********************************/

int AdoExucuteByList(char* pReadBuf)

{

 

 

#pragma warning(disable : 4996)

char sql_buf[BUFSIZ * 20] = { '\0' };

char *p = NULL;

_RecordsetPtr record = NULL;

int j = 0;

while (true) {

memset(sql_buf, 0, sizeof(sql_buf));

if (j == 0)

{

p = strtok(pReadBuf, ";");

sprintf_s(sql_buf, "%s", p);

}

else

{

p = strtok(NULL, ";");

sprintf_s(sql_buf, "%s", p);

}

j++;

if (!p || strlen(sql_buf) <= 0)

{

break;

}

record = AdoExucute(sql_buf);

//Dialog_XXXX2::GetRecordResult_insert_list(record);

if (IDNO == AfxMessageBox("选择是否继续执行?", MB_YESNO)) {

AfxMessageBox("结束执行!");

return j;

}

 

 

}

 

 

return j;

}

 

 

 

 

 

 

 

 

 

 

/*********************************************************

* 名称:FieldType

* 功能:返回字段类型

* 用法:FieldType(nType as integer)

*********************************************************

Function FieldType(nType As Integer) As String

Select Case nType

Case 128

FieldType = "BINARY"

Case 11

FieldType = "BIT"

Case 129

FieldType = "CHAR"

Case 135

FieldType = "DATETIME"

Case 131

FieldType = "DECIMAL"

Case 5

FieldType = "FLOAT"

Case 205

FieldType = "IMAGE"

Case 3

FieldType = "INT"

Case 6

FieldType = "MONEY"

Case 130

FieldType = "NCHAR"

Case 203

FieldType = "NTEXT"

Case 131

FieldType = "NUMERIC"

Case 202

FieldType = "NVARCHAR"

Case 4

FieldType = "REAL"

Case 135

FieldType = "SMALLDATETIME"

Case 2

FieldType = "SMALLMONEY"

Case 6

FieldType = "TEXT"

Case 201

FieldType = "TIMESTAMP"

Case 128

FieldType = "TINYINT"

Case 17

FieldType = "UNIQUEIDENTIFIER"

Case 72

FieldType = "VARBINARY"

Case 204

FieldType = "VARCHAR"

Case 200

FieldType = ""

End Select

End Function

 

 

*********************************************************/

 

 

//====================oracle===========

 

 

 

 

 

 

#include "stdio.h" 

/**

读取文件所有内容并舍弃包含标识的行数据

**/

int __stdcall ReadSqlFile(const char *path_file, char * pReadBuf, char *line_notes_flag)

{

FILE *fp = NULL;

char str[BUFSIZ * 10];

if ((fp = fopen(path_file, "r")) == NULL) {

AfxMessageBox("cannot open file");

return -1;

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

 

 

if (strstr(str, line_notes_flag)) {

continue;

}

printf("%s", str);

strcat(pReadBuf, str);

}

}

fclose(fp);

AfxMessageBox(pReadBuf);

return 0;

}

#include "stdio.h" 

/**

读取文件所有内容并将包含标识的行数据 从标识处接断舍弃

**/

int __stdcall ReadSqlFileTok(const char *path_file, char * pReadBuf, char *line_notes_flag)

{

FILE *fp = NULL;

char str[BUFSIZ * 10] = { '\0' };

char temp[BUFSIZ * 10] = { '\0' };

if ((fp = fopen(path_file, "r")) == NULL) {

AfxMessageBox("cannot open file");

return -1;

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

 

 

if (char*p = strstr(str, line_notes_flag)) {

memset(temp, '\0', sizeof(temp));

strncpy(temp, str, p - str);

strcat(pReadBuf, temp);

continue;

}

printf("%s", str);

strcat(pReadBuf, str);

}

}

fclose(fp);

if (fp) {

fclose(fp);

}

AfxMessageBox(pReadBuf);

return 0;

}

 

 

#include "stdio.h" 

/**

读取文件所有内容并将包含标识的行数据 从标识处接断舍弃

 char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

**/

int __stdcall ReadSqlFileTok(const char *path_file, char * pReadBuf, char *line_notes_flag, char* flag_Tips)

{

FILE *fp = NULL;

char str[BUFSIZ * 10] = { '\0' };

char temp[BUFSIZ * 10] = { '\0' };

if ((fp = fopen(path_file, "r")) == NULL) {

AfxMessageBox("cannot open file");

return -1;

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

 

 

if (char*p = strstr(str, line_notes_flag)) {

memset(temp, '\0', sizeof(temp));

strncpy(temp, str, p - str);

strcat(pReadBuf, temp);

continue;

}

printf("%s", str);

strcat(pReadBuf, str);

}

}

fclose(fp);

if (fp) {

fclose(fp);

}

if (strcmp(flag_Tips, "FALSE") != 0) {

AfxMessageBox(pReadBuf);

}

return 0;

}

 

 

#include "stdio.h" 

/**

读取文件内容返回查找的数据行 可返回多行数据

**/

char* __stdcall ReadFileSearch(const char* path_file, char* pReadBuf, char* search_srting)

{

FILE *fp = NULL;

char str[BUFSIZ * 5];

if ((fp = fopen(path_file, "r")) == NULL) {

AfxMessageBox("cannot open file");

return NULL;

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

if (strstr(str, search_srting)) {

strcat(pReadBuf, str);

}

}

}

fclose(fp);

strlen(pReadBuf) <= 0 ? AfxMessageBox("无匹配数据!!") : AfxMessageBox(pReadBuf);

return pReadBuf;

}

 

 

 

 

#include "stdio.h" 

/**

读取文件内容返回查找的数据行 可返回多行数据

char* flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

**/

char* __stdcall ReadFileSearch(const char* path_file, char* pReadBuf, char* search_srting, char* flag_Tips)

{

FILE *fp = NULL;

char str[BUFSIZ * 5];

if ((fp = fopen(path_file, "r")) == NULL) {

AfxMessageBox("cannot open file");

return NULL;

}

memset(pReadBuf, '\0', sizeof(pReadBuf));

while (!feof(fp)) {

if (long count = fgets(str, sizeof(str) - 1, fp) != NULL) {  //读取一行数据

if (strstr(str, search_srting)) {

strcat(pReadBuf, str);

}

}

}

fclose(fp);

if (fp) {

fclose(fp);

}

if (strcmp(flag_Tips, "FALSE") != 0) { //flag_Tips 是否提示信息  FALSE 不提示,TRUE 提示

strlen(pReadBuf) <= 0 ? AfxMessageBox("无匹配数据!!") : AfxMessageBox(pReadBuf);

}

return pReadBuf;

}

 

 

 

 

 

 

 

 

/************************************************************************/

/* 选择文件获得文件路径                                                                  */

/************************************************************************/

const CString chose_file_path()

{

// TODO: 在此添加控件通知处理程序代码

CString FilePathName;

CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框

NULL,

NULL,

OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

(LPCTSTR)_TEXT("JPG Files (*.jpg)|*.jpg|TXT Files(*.txt)|*.txt|All Files (*.*)|*.*|"),

NULL);

if (dlg.DoModal() == IDOK)

{

FilePathName = dlg.GetPathName(); //文件名保存在了FilePathName里

}

else

{

return NULL;

}

AfxMessageBox(FilePathName);

return FilePathName;

}

 

 

 

 

 

 

/* 功  能:将str字符串中的oldstr字符串替换为newstr字符串

 * 参  数:str:操作目标 oldstr:被替换者 newstr:替换者

 * strcat() 通过字符串连接实现 保证源字符串空间足够

 * 返回值:返回替换之后的字符串

 */

char* str_replace(char* str, const char *oldstr, const char *newstr)

{

char bstr[BUFSIZ * 10];//转换缓冲区

memset(bstr, '\0', sizeof(bstr));

 

 

for (unsigned int i = 0; i < strlen(str); i++) {

if (!strncmp(str + i, oldstr, strlen(oldstr))) {//比较字符串是否相等

strcat(bstr, newstr);

i += strlen(oldstr) - 1;

}

else {

strncat(bstr, str + i, 1);//保存一字节进缓冲区

}

}

strcpy(str, bstr);

return str;

}

 

 

/*

*去掉字符串首尾的 \x20 \r \n 字符

*/

void TrimSpace(char* str)

{

char *start = str - 1;

char *end = str;

char *p = str;

while (*p)

{

switch (*p)

{

case ' ':

case '\r':

case '\n':

{

if (start + 1 == p)

start = p;

}

break;

default:

break;

}

++p;

}

//现在来到了字符串的尾部 反向向前

--p;

++start;

if (*start == 0)

{

//已经到字符串的末尾了

*str = 0;

return;

}

end = p + 1;

while (p > start)

{

switch (*p)

{

case ' ':

case '\r':

case '\n':

{

if (end - 1 == p)

end = p;

}

break;

default:

break;

}

--p;

}

memmove(str, start, end - start);

*(str + (int)end - (int)start) = 0;

}

 

 

 

 

#include <io.h>

/************************************************************************/

/* 判断文件路径是否存在 或者权限

int   access(const   char   *filename,   int   amode);

amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。

这个函数还可以检查其它文件属性:

06     检查读写权限

04     检查读权限

02     检查写权限

01     检查执行权限

00     检查文件的存在性

而这个就算这个文件没有读权限,也可以判断这个文件存在于否

存在返回0,不存在返回-1*/

/************************************************************************/

int file_exists(const char *PATH, int iMode) {

return _access(PATH, iMode);

}

 

 

 

 

/************************************************************************/

/*

判断参数是否是数字组成

*/

/************************************************************************/

bool IsNumber(const char * input)

{

for (int i = 0; i < (int)strlen(input); i++)

{

int tmp = (int)input[i];

if (tmp >= 48 && tmp <= 57)

{

continue;

}

else

{

return false;

}

}

return true;

}

 

 

/************************************************************************/

/*

判断参数是否是数字组成

*/

/************************************************************************/

bool IsNumber2(const char * input)

{

for (int i = 0; i < (int)strlen(input); i++)

{

if (isdigit(input[i] == 0))

{

continue;

}

else

{

return false;

}

}

return true;

}

 

 

/************************************************************************/

/*

统计字符串出现次数

*/

/************************************************************************/

long Count_String(const char * Original_Str, const char * Finded_Str)

{

long count = 0L;

long length = strlen(Finded_Str);

const char *p = Original_Str;

if (strlen(Finded_Str) > strlen(Original_Str) || !Finded_Str) {

return -1L;

}

do {

p = strstr(p, Finded_Str);

if (p) {

count++;

p += length;

}

 

 

} while (p);

 

 

return count;

}

 

 

/************************************************************************/

/*

统计字符出现次数

*/

/************************************************************************/

long Count_Char(const char * Original_Str, int C)

{

long count = 0L;

const char *p = Original_Str;

if (!Original_Str && !C) {

return -1L;

}

do {

p = strchr(p, C);

if (p) {

count++;

p++;

}

} while (p);

 

 

return count;

}

 

 

/************************************************************************/

/*

获取windows系统进程号 线程号

*/

/************************************************************************/

CString Get_PID_UPD_AfxMessageBox(char * msg_Tips)

{

CString strMsg;

strMsg.Format(_T("%s\n\r当前进程号:%d\n执行线程号: %d"),

msg_Tips,

GetCurrentProcessId(),

GetCurrentThreadId());

AfxMessageBox(strMsg);

return strMsg;

}

 

 

/**********************************************************************/

/*

拼接sql字符串

char* key_value[][2]

*/

/**********************************************************************/

char* sqladd(char* key_value[][2], char* add_sql)

{

/*

char* initSQL = "insert into %s (%s) values(%s)";

char* tabname = "Y_REFUND_LOG";

char* column_names = "FUND_SEQ_NO,BATCH_NO,SET_YEAR,SOCIAL_CODE,OLD_FUND_SEQ_NO,TRAN_TYPE,CHANNEL,STATUS,OUT_ACCT_NO,INPUT_DATE,TRAN_DATE,TRAN_AMT,PAY_MODE,OUT_BANK_CODE,SUMMARY,IS_CHECK,USAGE,CHECK_MSG,RET_CODE,RET_MSG,OPERATOR,AUDITOR,REMARK,BIZ_SEQ_NO,RECORD_TYPE,HOST_DATE,HOST_SID,TOTAL_AMT,TOTAL_NUM,S_AMT,S_NUM,F_AMT,F_NUM,OUT_ACCT_NAME,IN_ACCT_NO,IN_ACCT_NAME,IN_ACCT_BANK,IN_ACCT_BANKNO,BATCH_STATUS,IN_BANK_CODE,IS_FINISH,SOCIAL_NO,SEND_FILE_NAME,RECEIVE_FILE_NAME,TRAN_TIME,OUT_ACCT_BANKNO,IS_ENTRUST,PAY_CHANNEL,AUDITOR_CHECK_TIME,IS_SAME_BANK,YAD107";

char column_names_key[52][BUFSIZ];

char column_names_values[52][BUFSIZ] = {};

 

 

sprintf_s(values, sizeof(values), "%s\'%s\',", values, "代付退款跨行归集"); //remark

sprintf_s(values, sizeof(values), "%s%s,", values, "NULL");

*/

 

 

int count = sizeof(*key_value); //这个会显示出二维数组中每个行的元素个数 (这里是指可容纳的个数)

int sie = sizeof(key_value);//这个会显示出二维数组中元素的个数(这里是指可容纳的个数) 

memset(add_sql,0,sizeof(add_sql));

int i = 0; int  j = 0;

if (key_value[0][0]) {

for (i = 0; i < count; i++) {

if (key_value[i][0])

{

if (key_value[i][1]) {

sprintf_s(add_sql, sizeof(add_sql), "%s\'%s\',", key_value[i][0], key_value[i][1]);

}

else

{

sprintf_s(add_sql, sizeof(add_sql), "%s%s,", key_value[i][0], "NULL");

}

}

else

{

break;

}

 

 

 

 

}

}

else

{

}

 

 

 

 

return add_sql;

}

 

 

 

 

/**********************************************************************/

/*

拼接sql字符串

char* key_value[][2]

*/

/**********************************************************************/

char* sqladd2(char* _value[2][BUFSIZ], char* add_sql)

{

 

 

 

 

 

 

return NULL;

}

 

 

 

 

 

 

/**********************************************************************

字符串转数字  long double

**********************************************************************/

long double Atolongdouble(char* A)

{

long double ldRet = 0;

long long llBefore = 0;

double dAfter = 0;

long signscale = 0L;

char a[BUFSIZ] = { 0 };

char temp[BUFSIZ] = { 0 };

 

 

if (strlen(A) <= 0) {

throw "入参异常!";

}

memset(a, 0, sizeof(a));

strcat(a, A);

char* p = strtok(a, ".");

llBefore = atoll(p);

p = strtok(NULL, ".");

signscale = strlen(p);

memset(temp, 0, sizeof(temp));

sprintf_s(temp, sizeof(temp), "0.%s", p);

dAfter = atof(temp);

double fAfter = atof(temp);

ldRet = llBefore + dAfter;

return ldRet;

}

 

 

/**********************************************************************

字符串转数字  long double

**********************************************************************/

 char* AtolongdoubleX100(char* A)

{

long double ldRet = 0;

long long llBefore = 0;

double dAfter = 0;

long signscale = 0L;

static char a[BUFSIZ] = { 0 };

char temp[BUFSIZ] = { 0 };

 

 

if (strlen(A) <= 0) {

throw "入参异常!";

}

memset(a, 0, sizeof(a));

strcat(a, A);

char* p = strtok(a, ".");

llBefore = atoll(p);

p = strtok(NULL, ".");

signscale = strlen(p);

 

 

//long la = atol(p);

memset(temp, 0, sizeof(temp));

if (strlen(p) == 0)

{

sprintf_s(temp, sizeof(temp), "00");

}

if (strlen(p) == 1)

{

sprintf_s(temp, sizeof(temp), "%s0",p);

}

if (strlen(p) == 2)

{

sprintf_s(temp, sizeof(temp), "%s", p);

}

 

 

if (strlen(p) > 2 || signscale > 2) {

 

 

strncpy(temp, p,2);

strcat(temp, ".");

strcat(temp, p + 2);

}

memset(a,0,sizeof(a));

sprintf_s(a, sizeof(a), "%lld%s", llBefore, temp);

 

 

return a;

}

 

 

 

 

 

 

 

 

#include "afxwin.h"

 //复制到剪切板

 void CopyCStringToClipboard(CString str)

 {

 

 

//CString str;

//str的值从外部获取        

if (0 == str.GetLength()) {

AfxMessageBox(_T("数据为空"));

return;

}

//将CString转换为char       

USES_CONVERSION;

//调用函数,T2A和W2A均支持ATL和MFC中的字符转换

//char * charData = T2A(str);

//char * charData = W2A(str); //也可实现转换

char * charData = (char*)(LPCTSTR)(str);

//将数据保存至粘贴板

HGLOBAL hClip;

//定义一个HGLOBAL句柄变量用来指向分配的内存块

if (OpenClipboard(NULL))

{

EmptyClipboard(); //将剪贴板内容清空

hClip = GlobalAlloc(GMEM_MOVEABLE, str.GetLength() + 1);

//在堆上分配可移动的内存块,程序返回一个内存句柄

char * buff; //定义指向字符型的指针变量

buff = (char*)GlobalLock(hClip);

//对分配的内存块进行加锁,将内存块句柄转化成一个指针,并将相应的引用计数器加1        

strcpy(buff, charData);

//将用户输入的数据复制到指针变量中,实际上就是复制到分配的内存块中

GlobalUnlock(hClip);

//数据写入完毕,进行解锁操作,并将引用计数器数字减1

SetClipboardData(CF_TEXT, hClip);

//将存放有数据的内存块放入剪贴板的资源管理中

CloseClipboard();

//关闭剪贴板,释放剪贴板资源的占用权

AfxMessageBox(_T("已将数据存入剪贴板"));

}

else

{

AfxMessageBox(_T("不能打开剪贴板"));

}

 }

 

 

 /**************************************

  将整个文件复制到剪贴板,注意是文件不是文本内容

  CopyFileToClipboard("D:\\user.txt");

 **************************************/

 int CopyFileToClipboard(char szFileName[])

 {

UINT uDropEffect;

HGLOBAL hGblEffect;

LPDWORD lpdDropEffect;

DROPFILES stDrop;

 

 

HGLOBAL hGblFiles;

LPSTR lpData;

 

 

//与剪贴板交互的数据格式并非标准剪贴板格式,因此需要注册

uDropEffect = RegisterClipboardFormat("Preferred DropEffect");

//为剪贴板数据分配空间

hGblEffect = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE, sizeof(DWORD));

lpdDropEffect = (LPDWORD)GlobalLock(hGblEffect);

//设置操作的模式

*lpdDropEffect = DROPEFFECT_COPY;//复制; 剪贴则用DROPEFFECT_MOVE

GlobalUnlock(hGblEffect);

 

 

//剪贴板数据需要一个这个结构

stDrop.pFiles = sizeof(DROPFILES);//文件列表相对于结构的偏移量

stDrop.pt.x = 0;

stDrop.pt.y = 0;

stDrop.fNC = FALSE;

stDrop.fWide = FALSE;//宽字符设置

 

 

//分配数据空间,并且预留文件名的空间

//文件列表为两个'\0'结尾,因此需要多分配2个字节

hGblFiles = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE, sizeof(DROPFILES) + strlen(szFileName) + 2);

 

 

lpData = (LPSTR)GlobalLock(hGblFiles);

memcpy(lpData, &stDrop, sizeof(DROPFILES));

strcpy(lpData + sizeof(DROPFILES), szFileName);

GlobalUnlock(hGblFiles);

 

 

//普通的剪贴板操作

OpenClipboard(NULL);

EmptyClipboard();

//设置剪贴板文件信息

SetClipboardData(CF_HDROP, hGblFiles);

//设置剪贴板操作信息

SetClipboardData(uDropEffect, hGblEffect);

CloseClipboard();

 

 

return 1;

 }


↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值