zoukankan      html  css  js  c++  java
  • ORACEL上传BLOB,深度遍历文件夹


    // uploadingDlg.cpp : 实现文件
    //

    #include "stdafx.h"
    #include "uploading.h"
    #include "uploadingDlg.h"
    #include "afxdialogex.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif


    // CuploadingDlg 对话框


    CuploadingDlg::CuploadingDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CuploadingDlg::IDD, pParent)
    , m_OpTypeString(_T(""))
    , m_usernameString(_T(""))
    , m_passwordString(_T(""))
    , m_dataBaseString(_T(""))
    , m_hostString(_T(""))
    , m_IpAddressString(_T(""))
    , m_InnoString(_T(""))
    , m_szFilepPathString(_T(""))
    {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CuploadingDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT5, m_OpType);
    DDX_Text(pDX, IDC_EDIT5, m_OpTypeString);
    DDX_Control(pDX, IDC_EDIT1, m_username);
    DDX_Text(pDX, IDC_EDIT1, m_usernameString);
    DDX_Control(pDX, IDC_EDIT2, m_password);
    DDX_Text(pDX, IDC_EDIT2, m_passwordString);
    DDX_Control(pDX, IDC_EDIT3, m_dataBase);
    DDX_Text(pDX, IDC_EDIT3, m_dataBaseString);
    DDX_Control(pDX, IDC_EDIT4, m_host);
    DDX_Text(pDX, IDC_EDIT4, m_hostString);
    DDX_Control(pDX, IDC_EDIT6, m_IpAddress);
    DDX_Text(pDX, IDC_EDIT6, m_IpAddressString);
    DDX_Control(pDX, IDC_INNO, m_Inno);
    DDX_Text(pDX, IDC_INNO, m_InnoString);
    DDX_Control(pDX, IDC_EDIT7, m_szFilepPath);
    DDX_Text(pDX, IDC_EDIT7, m_szFilepPathString);
    }

    BEGIN_MESSAGE_MAP(CuploadingDlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDOK, &CuploadingDlg::OnBnClickedOk)
    ON_BN_CLICKED(IDC_BUTTON1, &CuploadingDlg::OnBnClickedButton1)
    END_MESSAGE_MAP()


    // CuploadingDlg 消息处理程序

    BOOL CuploadingDlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog();

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    // 执行此操作
    SetIcon(m_hIcon, TRUE); // 设置大图标
    SetIcon(m_hIcon, FALSE); // 设置小图标

    // TODO: 在此添加额外的初始化代码

    m_IpAddress.SetWindowTextA("127.0.0.1");
    m_host.SetWindowTextA("1521");
    m_OpType.SetWindowTextA("jpg");
    m_dataBase.SetWindowTextA("orcl");

    return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
    }

    // 如果向对话框添加最小化按钮,则需要下面的代码
    // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
    // 这将由框架自动完成。

    void CuploadingDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文

    SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

    // 使图标在工作区矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialogEx::OnPaint();
    }
    }

    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CuploadingDlg::OnQueryDragIcon()
    {
    return static_cast<HCURSOR>(m_hIcon);
    }


    UINT Send(LPVOID lParam)
    {
    CuploadingDlg *pthis = (CuploadingDlg*)lParam;
    int i=0;
    int errorcount = 0;
    for ( i=0;i<pthis->v.size();++i)
    {
    if(pthis->SendPhoto(pthis->v[i]) != 0 )
    {
    errorcount++;
    continue;
    }
    CString temp;
    temp.Format("正在处理第%d条",i+1);
    pthis->m_Inno.SetWindowTextA(temp);
    pthis->GetDlgItem(IDOK)->EnableWindow(FALSE);
    }

    CString temp;
    temp.Format("处理完成,共有%d条数据,正确处理%d条,错误数据%d条",pthis->v.size(),pthis->v.size() - errorcount,errorcount);
    pthis->m_Inno.SetWindowTextA(temp);
    pthis->GetDlgItem(IDOK)->EnableWindow(TRUE);

    if (pthis->pRect)
    {
    pthis->pRect->Close();
    pthis->pRect = NULL;
    }
    if (pthis->pConn)
    {
    pthis->pConn->Close();
    pthis->pConn = NULL;
    }

    }


    void CuploadingDlg::OnBnClickedOk()
    {
    // TODO: 在此添加控件通知处理程序代码
    //CDialogEx::OnOK();
    UpdateData(TRUE);
    if (m_usernameString.IsEmpty() || m_passwordString.IsEmpty() || m_IpAddressString.IsEmpty() || m_hostString.IsEmpty() || m_dataBaseString.IsEmpty() || m_OpTypeString.IsEmpty() || m_szFilepPathString.IsEmpty())
    {
    return ;
    }
    std::vector<CString>().swap(v);
    TraverseDir(m_szFilepPathString, v);

    if(OpenDataBase() != 0 )return ;
    CWinThread *IninThread = AfxBeginThread(Send,this);

    }

    void CuploadingDlg::TraverseDir(CString& dir,std::vector<CString>& vec)//深度遍历文件夹
    {
    CFileFind ff;
    if (dir.Right(1) != "\")
    {
    dir += "\";
    }
    dir += "*.*";

    BOOL ret = ff.FindFile(dir);
    while (ret)
    {
    ret = ff.FindNextFileA();
    if (ff.IsDirectory() && !ff.IsDots())
    {
    CString path = ff.GetFilePath();
    TraverseDir(path,vec);
    }
    if (!ff.IsDirectory() && !ff.IsDots())
    {
    CString name = ff.GetFileName();
    CString path = ff.GetFilePath();
    int dotpos = name.ReverseFind('.');
    CString fileExt = name.Right(name.GetLength() - dotpos-1);
    m_OpTypeString = "";
    m_OpType.GetWindowTextA(m_OpTypeString);
    m_OpTypeString.MakeLower();
    if (fileExt == m_OpTypeString)
    {
    vec.push_back(path);
    }
    }
    }
    ff.Close();
    }


    int CuploadingDlg::SendPhoto(CString photoPath)
    {
    CStdioFile file;
    if (file.Open(photoPath,CFile::modeRead|CFile::typeBinary) == FALSE)
    {
    Writelog("打开文件失败:%s",photoPath);
    return -1;
    }
    long filelen = file.GetLength();
    byte *fielBuffer = new byte[filelen+1];
    byte *oldfieldBuffer = fielBuffer;
    file.Read(fielBuffer,filelen);
    file.Close();

    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = filelen;

    SAFEARRAY *safeArray;
    safeArray = SafeArrayCreate(VT_UI1,1,rgsabound);
    for (long i=0;i< filelen;i++)
    {
    SafeArrayPutElement(safeArray,&i,fielBuffer++);
    }

    VARIANT varBLOB;
    varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = safeArray;

    if (fielBuffer)
    {
    delete[] oldfieldBuffer;
    fielBuffer = NULL;
    }

    CString str;
    try
    {

    CString Index;
    str.Format("select faceid from (select * from userface order by faceid desc) where rownum=1");
    _variant_t vt;
    pRect = pConn->Execute(_bstr_t(str),&vt,adCmdText);
    if (vt.lVal < 1)
    {
    Index = "0";
    }else
    {
    Index = LPSTR(_bstr_t(pRect->GetCollect("faceid")));
    }
    CString filename;
    int dotpos = photoPath.ReverseFind('.');
    filename = photoPath.Mid(0,dotpos);
    dotpos = filename.ReverseFind('\');
    filename = filename.Right(filename.GetLength() - dotpos-1);

    str.Format("insert into userface(faceid,USERID,FEATURE) values(%d,'%s','000')",atoi(Index)+1,filename);
    pRect = pConn->Execute(_bstr_t(str),&vt,adCmdText);
    if (vt.lVal < 1)
    {
    Writelog("插入数据失败:%s",str);
    SafeArrayDestroy(safeArray);
    if (pRect)
    {
    pRect->Close();
    pRect = NULL;
    }
    if (pConn)
    {
    pConn->Close();
    pConn = NULL;
    }

    return -1;
    }
    str.Format("select * from userface where faceid = %d",atoi(Index) +1);
    HRESULT hr;
    hr = pRect->Open(str.GetBuffer(0),(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);
    hr = pRect->GetFields()->GetItem("IMAGE")->AppendChunk(varBLOB);
    if (hr == S_OK)
    {
    pRect->Update();
    pRect->Requery(0);
    }
    SafeArrayDestroy(safeArray);
    if (pRect)
    {
    pRect->Close();
    pRect = NULL;
    }
    }
    catch (_com_error &e)
    {
    Writelog("SendCommand捕获异常:%s",e.ErrorMessage());
    if (pRect)
    {
    pRect->Close();
    pRect = NULL;
    }
    if (pConn)
    {
    pConn->Close();
    pConn = NULL;
    }
    return -1;
    }
    return 0;
    }


    int CuploadingDlg::OpenDataBase(void)
    {
    pConn.CreateInstance(__uuidof(Connection));//连接对像
    pRect.CreateInstance(__uuidof(Recordset));//记录集对象

    CString strConn;

    strConn.Format("Provider=OraOLEDB.Oracle.1;User ID=%s;Password=%s;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%s)(PORT=%s))(CONNECT_DATA=(SERVICE_NAME=%s)))",m_usernameString,m_passwordString,m_IpAddressString,m_hostString,m_dataBaseString);
    HRESULT rValue = pConn->Open(_bstr_t(strConn),"","",adModeUnknown);
    if (rValue == S_FALSE)
    {
    MessageBox(_T("打开失败"));
    return -1;
    }
    return 0;
    }


    void CuploadingDlg::Writelog(char* buf,...)
    {
    try
    {
    CString sdlog;
    m_szFilepPath.GetWindowTextA(m_szFilepPathString);
    if (m_szFilepPathString.IsEmpty())
    {
    sdlog =" C:\Send";

    }else
    {
    sdlog = m_szFilepPathString;
    }
    sdlog += "\log\";
    CreateDirectory(sdlog, NULL);
    long i=0;
    char tmp[32],tmpfile[256];
    //char tmpPrint[4096]={0};

    char buffer[1524]={0};
    char Data[1024]={0};
    FILE *fp;

    SYSTEMTIME SystemTimeStruct;
    ::GetLocalTime(&SystemTimeStruct);

    sprintf(tmp,"%04d%02d%02d ",SystemTimeStruct.wYear,SystemTimeStruct.wMonth,
    SystemTimeStruct.wDay);

    sprintf(tmpfile,"%s%s.log",sdlog,tmp);

    fp=fopen(tmpfile,"at");
    if (fp == NULL)
    {
    return;
    }

    va_list arglist;

    va_start(arglist, buf);
    vsprintf(&Data[strlen(Data)], buf, arglist);
    va_end(arglist);
    sprintf(buffer,"%02d:%02d:%02d %s",SystemTimeStruct.wHour,SystemTimeStruct.wMinute,
    SystemTimeStruct.wSecond,Data);

    fputs(buffer,fp);
    fputs(" ",fp);

    fclose(fp);
    }
    catch(...)
    {

    return;
    }
    }


    void CuploadingDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    char szPath[MAX_PATH];

    ZeroMemory(szPath,sizeof(szPath));

    BROWSEINFO bi;
    bi.hwndOwner = m_hWnd;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = szPath;
    bi.lpszTitle = "请选择文件夹";
    bi.ulFlags = 0;
    bi.lpfn = NULL;
    bi.lParam = 0;
    bi.iImage = 0;

    LPITEMIDLIST lp = SHBrowseForFolder(&bi);

    if (lp && SHGetPathFromIDList(lp,szPath))
    {
    m_szFilepPathString.Format("%s",szPath);
    m_szFilepPath.SetWindowTextA(m_szFilepPathString);
    }
    }

  • 相关阅读:
    IOS多态在项目中的应用
    经济博弈题-逻辑思维-算法-海盗分金币
    iOS weak底层实现原理
    Two Sum
    HTTP与HTTPS的理解
    iOS 加锁的方式
    PHP 打印前一天的时间
    PHP 遍历文件夹下的文件以及子文件夹
    PHP 获取url里文件的扩展名
    vi 编辑器基本命令
  • 原文地址:https://www.cnblogs.com/dengpeng1004/p/oracle.html
Copyright © 2011-2022 走看看