#include "StdAfx.h" #include "NetShareInfo.h" #include #include "./helper/ffsco.h" BOOL CNetShareInfo::m_bInit = FALSE; LPCTSTR CNetShareInfo::m_lpHostName = NULL; CString CNetShareInfo::m_lpDomain = _T(""); CArray* CNetShareInfo::m_pAryOfNetShareInfo = NULL; CNetShareInfo::CNetShareInfo(void) { } CNetShareInfo::~CNetShareInfo(void) { } /************************************************************************/ /* 函数:Initialize 描述:初始化; 参数: IN:lpDomain 域名; IN:lpHostName 主机名; IN:pAryOfNetShareInfo NetShareInfo表数据; 返回:初始化完成返回TRUE; 示例: */ /************************************************************************/ BOOL CNetShareInfo::Initialize(IN LPCTSTR lpDomain, IN LPCTSTR lpHostName, IN CArray *pAryOfNetShareInfo) { if ( !m_bInit ) { m_lpDomain = lpDomain; m_lpHostName = lpHostName; m_pAryOfNetShareInfo = pAryOfNetShareInfo; m_bInit = TRUE; } return m_bInit; } /************************************************************************/ /* 函数:LoadSpecifiedDirectory 描述:加载指定目录及子目录下的全部相片; 参数: IN:lpSpecifiedDirectory 要加载的目录; OUT:AryOfImgPath 返回指定目录下的全部相片路径集合; 返回: 示例: */ /************************************************************************/ BOOL CNetShareInfo::LoadSpecifiedDirectory(IN LPCTSTR lpSpecifiedDirectory, OUT CStringArray &AryOfImgPath) { // 1.判定目录有效性; //if ( lpSpecifiedDirectory == NULL || strcmp(lpSpecifiedDirectory,"") == 0 || !PathFileExists(lpSpecifiedDirectory) ) if( !PathFileExists(lpSpecifiedDirectory) ) { // 目录无效; return FALSE; } using namespace helper_coffs; ffsco o; o.dirs(1); o.find(lpSpecifiedDirectory, LPCSTR("*.*")); ffsco::typeT cfs; ffsco::typeT::iterator it; cfs = o.co_file(); CString strName; for (it = cfs.begin(); cfs.end() != it; it++) { // 去除目录级文件; // 去除ok文件; // 去除modifytime文件; // 去除s+m缩略图; strName = it->c_str(); strName.MakeLower(); if ( strName.Find('.') == -1) continue; else { CString str = strName.Mid( strName.ReverseFind('\\') + 1 ); if ( str.Find('.') == -1) continue; } // 如果在相片前或后加修饰,都会有bug,最佳做法是缩略图放在另一子文件夹中; // 产生的bug:使用原名导入相片时,相片名可能第一个字母就是s或m; if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 's' )continue; if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 'm' )continue; if ( strName.Find(_T(".jpg")) == -1 ) { if ( strName.Find(_T(".jpeg")) == -1 ) continue; } BOOL bExist = FALSE; for ( int i = 0; i < AryOfImgPath.GetSize(); i++ ) { if ( AryOfImgPath.ElementAt(i).CompareNoCase(strName) == 0 ) { bExist = TRUE; break; } } if ( !bExist ) { AryOfImgPath.Add(strName); } } return TRUE; } /************************************************************************/ /* 函数:LoadSelectedImageDirectory 描述:加载选中的相片的共享路径; 参数: IN:lpSpecifiedDirectory 要加载相片的目录; IN:AryOfSelectedImages 被选中的相片集合; OUT:AryOfImgPath 返回被选中的相片的路径集合; 返回: 示例: */ /************************************************************************/ BOOL CNetShareInfo::LoadSelectedImageDirectory(IN LPCTSTR lpSpecifiedDirectory, IN CStringArray &AryOfSelectedImages, OUT CStringArray &AryOfImgPath) { // 1.判定目录有效性; if ( lpSpecifiedDirectory == NULL || strcmp(lpSpecifiedDirectory,_T("")) == 0) { // 目录无效; return FALSE; } using namespace helper_coffs; ffsco o; o.dirs(1); o.find(lpSpecifiedDirectory, LPCSTR("*.*")); ffsco::typeT cfs; ffsco::typeT::iterator it; cfs = o.co_file(); CString strName; for (it = cfs.begin(); cfs.end() != it;) { // 去除目录级文件; // 去除ok文件; // 去除modifytime文件; // 去除s+m缩略图; strName = it->c_str(); strName.MakeLower(); if ( strName.Find('.') == -1) { it = cfs.erase(it); continue; } else { CString str = strName.Mid( strName.ReverseFind('\\') + 1 ); if ( str.Find('.') == -1) { it = cfs.erase(it); continue; } } // 如果在相片前或后加修饰,都会有bug,最佳做法是缩略图放在另一子文件夹中;\ // 产生的bug:使用原名导入相片时,相片名可能第一个字母就是s或m; if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 's' ){ it = cfs.erase(it); continue; } if ( strName.GetAt( strName.ReverseFind('\\') + 1 ) == 'm' ){ it = cfs.erase(it); continue; } if ( strName.Find(_T(".jpg")) == -1 ){ if( strName.Find(_T(".jpeg")) == -1) { it = cfs.erase(it); continue; } } it++; } #if 1 // 删除存在的文件的相片编号,留下没有文件的相片编号; TCHAR path_buffer[_MAX_PATH] = {0}; TCHAR szDrive[_MAX_DRIVE] = {0}; TCHAR szDir[_MAX_DIR] = {0}; TCHAR szFname[_MAX_FNAME] = {0}; TCHAR szExt[_MAX_EXT] = {0}; #if 1 for ( int a = 0; a < AryOfSelectedImages.GetSize(); a++ ) printf("Images8 = %s\n", AryOfSelectedImages.ElementAt(a)); #endif // AryOfImage 从尾部开始查找,查找成功后并删除,最终查找完全部共享目录都没找到的,就是相片不存在; for ( it = cfs.begin(); it != cfs.end(); it++ ) { //_splitpath_s(it->c_str(),szDrive,szDir,szFname,szExt); _splitpath(it->c_str(), szDrive, szDir, szFname, szExt); // printf("szDrive = %s, szDir = %s, szFname = %s, szExt = %s\n", szDrive, szDir, szFname, szExt); for ( int i = 0; i < AryOfSelectedImages.GetSize(); i++) { printf("Images9 = %s\n", AryOfSelectedImages.ElementAt(i)); if ( AryOfSelectedImages.ElementAt(i).CompareNoCase(szFname) == 0 ) { strName = it->c_str(); AryOfImgPath.Add(strName); AryOfSelectedImages.RemoveAt(i); break; } } } #endif return TRUE; } #if USE_FIX_SHARE /************************************************************************/ /* 函数:GetLoaclShareDirectory 描述:获取指定相片类型的本地原始共享目录名; 参数: IN: nPhotoType 相片类型; OUT: lpResultPath 返回指定相片类型的本地原始共享目录; 返回:成功返回TRUE; 示例: */ /************************************************************************/ void CNetShareInfo::GetLoaclShareDirectory(IN int const nPhotoType, OUT LPTSTR lpResultPath) { if ( m_lpHostName == NULL || m_lpHostName[0] == '\0' ) { // 主机名空; return; } switch( nPhotoType ) { case 1: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("客户原片(管理软件)$")); break; case 2: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("修好的片(管理软件)$")); break; case 3: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("精修好的片(管理软件)$")); break; case 4: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("设计好的片(管理软件)$")); break; #ifdef ENTERPRISE_VERSION #ifndef CHILD_VERSION case 5: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("客户原片备份(管理软件)$")); break; case 6: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("修好的片备份(管理软件)$")); break; case 7: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("精修好的片备份(管理软件)$")); break; case 8: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("设计好的片备份(管理软件)$")); break; #else case 5: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("客户原片备份(儿童管理软件)$")); break; case 6: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("修好的片备份(儿童管理软件)$")); break; case 7: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("精修好的片备份(儿童管理软件)$")); break; case 8: _stprintf(lpResultPath, _T("\\\\%s\\%s"), m_lpHostName, _T("设计好的片备份(儿童管理软件)$")); break; #endif #endif default: break; } } #endif /************************************************************************/ /* 函数:GetDiskSpaceInfo 描述:获取指定目录或盘符的容量信息; 参数: IN: lpRootPathName 根目录名称; INOUT: dTotalNum 总容量; INOUT: dFreeNum 可用容量; 返回: 注意: GetDiskFreeSpace函数不能满足当前超过2T的硬盘容量,因为里面的数据类型是UINT,最大支持32位(4G); GetDiskFreeSpaceEx支持64位(16384P=1024*16384T) 只能获取本机硬盘信息,且路径必须包含":"冒号; 调用约定: */ /************************************************************************/ BOOL CNetShareInfo::GetDiskSpaceInfo(IN LPCTSTR lpRootPathName,IN OUT double &dTotalNum, IN OUT double &dFreeNum) { // 校验参数有效性; if(lpRootPathName == NULL || _tcscmp(lpRootPathName,_T("")) == 0) { //_tprintf_s(_T("根目录为空!")); return FALSE; } // 如果长度==1; int nlen = _tcslen(lpRootPathName); if((1 == nlen) || ( 2 == nlen && lpRootPathName[nlen-1] != _T(':'))) { //_tprintf_s(_T("根目录无效!\n")); return FALSE; } if ( !PathFileExists(lpRootPathName)) { //_tprintf_s(_T("根目录不存在!\n")); return FALSE; } BOOL fResult = FALSE; DWORD dwSectPerClust; // 每簇的扇区数; DWORD dwBytesPerSect; // 每个扇区的字节数; DWORD dwFreeClusters; // 可用簇数; DWORD dwTotalClusters; // 总簇数; typedef BOOL (WINAPI *P_GDFSE)(LPCTSTR, PULARGE_INTEGER,PULARGE_INTEGER, PULARGE_INTEGER); P_GDFSE pGetDiskFreeSpaceEx = NULL; /*unsigned*/ __int64 i64FreeBytesToCaller; /*unsigned*/ __int64 i64TotalBytes; /*unsigned*/ __int64 i64FreeBytes; // 调用GetDiskFreeSpaceEx失败则调用GetDiskSpace; #ifdef UNICODE pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"GetDiskFreeSpaceExW"); #else pGetDiskFreeSpaceEx = (P_GDFSE)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetDiskFreeSpaceExA"); #endif if ( pGetDiskFreeSpaceEx ) { fResult = pGetDiskFreeSpaceEx(lpRootPathName, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes); if ( fResult ) { // 将单位由byte转为G byte; dTotalNum = (double)i64TotalBytes/1024/1024/1024; dFreeNum = (double)i64FreeBytes/1024/1024/1024; } } else { fResult = GetDiskFreeSpace(lpRootPathName, &dwSectPerClust, &dwBytesPerSect, &dwFreeClusters, &dwTotalClusters); if ( fResult ) { // 成功获得容量信息; i64TotalBytes = (__int64)dwTotalClusters * dwSectPerClust * dwBytesPerSect; i64FreeBytes = (__int64)dwFreeClusters * dwSectPerClust * dwBytesPerSect; // 将单位由byte转为G byte; dTotalNum = (double)i64TotalBytes/1024/1024/1024; dFreeNum = (double)i64FreeBytes/1024/1024/1024; } } return fResult; } /************************************************************************/ /* Date: 2015-04-10 Author: Jeff 函数:GetEnableShareDirectory 描述:返回指定相片类型可用的共享目录; 参数: IN: nPhotoType 相片类型; IN: lpOrderNum 订单号; IN: lpDomain 分店域名; OUT: lpEnableShareDirectory 可用的共享目录; 返回:成功返回TRUE; 注意:用于导入相片,最后返回的共享目录,使用MakeSuerDirectoryPathExists函数创建目录; 调用约定:# 测试:通过; */ /************************************************************************/ BOOL CNetShareInfo::GetEnableShareDirectory(IN const int &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, OUT LPTSTR lpEnableShareDirectory) { // 需要判断域名有效性; if (lpDomain && strcmp(lpDomain, _T("")) != 0) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } double dTotalNum = 0.0; double dFreeNum = 0.0; TCHAR szOrderNum[MAX_PATH] = { 0 }; TCHAR szLocalOrder[MAX_PATH] = { 0 }; TCHAR szShareDirectory[MAX_PATH] = { 0 }; #if USE_FIX_SHARE // 1.先判断当前局域网原始共享目录可用大小(是否小于20G); GetLoaclShareDirectory(nPhotoType,szShareDirectory);// 获取本地指定相片类型的共享目录; // 如果订单号存在原始共享目录中,判断目录容量是否有5G大小,如果有则存入,否则存入到别的优先级高的共享目录; if ( lpDomain == NULL || strcmp(lpDomain, _T("")) == 0) { // 分店域名为空,则为本店; _stprintf(szLocalOrder, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else {// 分店域名不为空; if ( strcmp(lpDomain, m_lpDomain) == 0) { // 本店域名; _stprintf(szLocalOrder, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { _stprintf(szLocalOrder, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } if ( !GetDiskSpaceInfo(szShareDirectory,dTotalNum,dFreeNum) ) { // 获取硬盘大小失败; return FALSE; } // 订单文件夹存在且原始共享目录可用大小>5G 或者 订单文件夹不存在时,容量必须大于指定值; if ((PathFileExists(szLocalOrder) && dFreeNum > MIN_CAPACITY) || dFreeNum > MAX_CAPACITY) { // 返回原始共享目录; _stprintf(lpEnableShareDirectory, _T("%s"), szLocalOrder); return TRUE; } #endif ////////////////////////////////////////////////////////////////////////// // 原始共享目录不可用,使用其他高优先级共享目录; if ( m_pAryOfNetShareInfo->GetSize() == 0) { // 记录为空,则仍旧使用原始共享目录; AfxMessageBox(_T("原共享目录可用大小低于正常容量,请添加新硬盘设置共享!")); #if USE_FIX_SHARE _stprintf(lpEnableShareDirectory, _T("%s"), szLocalOrder); #endif return TRUE; } typedef struct _STNetSharePathInfo__ { BYTE byPhotType; BYTE byminCapacity; BYTE bymaxCapacity; BYTE byPriority; CString strBranchId; CString strSharePath; }STNetSharePathInfo,*pSTNetSharePathInfo; BOOL bGetEnable = FALSE; BYTE byCurPriority = 0; int nSize = m_pAryOfNetShareInfo->GetSize(); // 如果没找到合适的共享目录,依旧使用原始共享目录或者使用优先级最高的那个; for ( int i = 0; i < nSize; i++) { // 域名是否与本店域名相同; if( m_pAryOfNetShareInfo->ElementAt(i).ElementAt(1).CompareNoCase(m_lpDomain) != 0 ) continue; if ( bGetEnable ) { if ( byCurPriority > atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(6)) ) continue; } STNetSharePathInfo tempNetShaerInfo; // 获取高优先级共享目录,依次取低优先级目录,直到获取可用目录为止; tempNetShaerInfo.byPhotType = atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)); tempNetShaerInfo.byminCapacity = atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(3)); tempNetShaerInfo.bymaxCapacity = atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(4)); tempNetShaerInfo.byPriority = atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(6)); tempNetShaerInfo.strBranchId = m_pAryOfNetShareInfo->ElementAt(i).ElementAt(1); tempNetShaerInfo.strSharePath = m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2); if ( tempNetShaerInfo.byPhotType == nPhotoType ) { ////////////////////////////////////////////////////////////////////////// // 判断目录下是否有订单文件夹; if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szOrderNum,_T("%s\\%s\\%s"),tempNetShaerInfo.strSharePath, lpDomain ,lpOrderNum); } else { _stprintf(szOrderNum,_T("%s\\%s"),tempNetShaerInfo.strSharePath, lpOrderNum); } // 存在且目录容量仍大于mincapacity可用; if ( PathFileExists(szOrderNum) ) { if ( !GetDiskSpaceInfo(tempNetShaerInfo.strSharePath,dTotalNum,dFreeNum) ) { // 获取硬盘大小失败; continue; } if ( dFreeNum > tempNetShaerInfo.byminCapacity ) { bGetEnable = TRUE; break; } } // 判断共享路径是否可用; if ( GetDiskSpaceInfo(tempNetShaerInfo.strSharePath,dTotalNum,dFreeNum) ) { if ( dFreeNum > tempNetShaerInfo.bymaxCapacity ) { // 获取最高优先级的共享目录; if ( byCurPriority < tempNetShaerInfo.byPriority) { byCurPriority = tempNetShaerInfo.byPriority; if (lpDomain && strcmp(lpDomain, "") != 0) { _stprintf(szOrderNum, _T("%s\\%s\\%s"), tempNetShaerInfo.strSharePath, lpDomain, lpOrderNum); } else { _stprintf(szOrderNum, _T("%s\\%s"), tempNetShaerInfo.strSharePath, lpOrderNum); } bGetEnable = TRUE; } } } } } ////////////////////////////////////////////////////////////////////////// // 返回结果; if(bGetEnable) _stprintf(lpEnableShareDirectory,_T("%s"),szOrderNum); #if USE_FIX_SHARE else _stprintf(lpEnableShareDirectory, _T("%s"), szLocalOrder); #endif return bGetEnable; } /************************************************************************/ /* 函数:LoadOrderImages 描述:加载指定订单的全部共享目录; 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpDomain 域名; OUT:AryOfOrderImagePaths 要返回所有共享订单目录下的全部相片路径; OUT:pAryOfSceneryDirectory 返回所有共享目录订单的目录路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::LoadOrderImages(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, OUT CStringArray& AryOfOrderImagePaths, OUT CStringArray* pAryOfSceneryDirectory /*= NULL*/) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; // printf("传入的域名:%s有误\n", lpDomain); return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfOrderImagePaths.RemoveAll(); // 清除数组; TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); // printf("szShareDirectory = %s\n", szShareDirectory); // printf("lpDomain1 = %s\n", lpDomain); // printf("m_lpDomain2 = %s\n", m_lpDomain); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; //printf("分店域名空,代表本店\n"); _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // printf("本店域名\n"); // 本店域名; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // printf("分店\n"); _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } // printf("szOrderPath=%s\n", szOrderPath); if ( PathFileExists(szOrderPath) ) { if ( pAryOfSceneryDirectory ) pAryOfSceneryDirectory->Add(szOrderPath); LoadSpecifiedDirectory(szOrderPath,AryOfOrderImagePaths); // printf("size1=%d\n", AryOfOrderImagePaths.GetSize()); } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; int i=0; nSize = m_pAryOfNetShareInfo->GetSize(); for ( i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0 && strcmp(lpDomain, m_lpDomain) != 0) { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } // 订单文件夹存在; if ( PathFileExists(szOrderPath)) { if ( pAryOfSceneryDirectory ) { pAryOfSceneryDirectory->Add(szOrderPath); } LoadSpecifiedDirectory(szOrderPath,AryOfOrderImagePaths); } } } return TRUE; } /************************************************************************/ /* 函数:LoadSceneryImages 描述:加载指定订单的景点的全部共享目录; 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpDomain 域名; IN:lpScenery 订单景点或套系名; OUT:AryOfSceneryImagePaths 要返回所有共享订单的景点或套系子目录下的全部相片路径; OUT:pAryOfSceneryDirectory 返回所有共享目录订单景点或套系的目录路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::LoadSceneryImages(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, IN LPCTSTR lpScenery, OUT CStringArray& AryOfSceneryImagePaths, OUT CStringArray* pAryOfOrderDirectory /*= NULL*/) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfSceneryImagePaths.RemoveAll(); // 清除数组; TCHAR szScenery[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szScenery, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szScenery, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } else { _stprintf(szScenery, _T("%s\\%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum, lpScenery); } } if ( PathFileExists(szScenery) ) { if ( pAryOfOrderDirectory ) { pAryOfOrderDirectory->Add(szScenery); } LoadSpecifiedDirectory(szScenery,AryOfSceneryImagePaths); } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; nSize = m_pAryOfNetShareInfo->GetSize(); for ( int i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szScenery, _T("%s\\%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum, lpScenery); } else { _stprintf(szScenery, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } // 订单文件夹存在; if ( PathFileExists(szScenery)) { if ( pAryOfOrderDirectory ) { pAryOfOrderDirectory->Add(szScenery); } LoadSpecifiedDirectory(szScenery,AryOfSceneryImagePaths); } } } return TRUE; } /************************************************************************/ /* 函数:LoadSelectedImages 描述:加载选中的相片,相片名不带景点名套系名,如:"005" 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpDomain 域名; IN:AryOfSelectedImages 选中的相片数组; OUT:AryOfSelectedImagePaths 返回选中的相片的路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::LoadSelectedImages(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, IN CStringArray& AryOfSelectedImages, OUT CStringArray& AryOfSelectedImagePaths) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfSelectedImagePaths.RemoveAll(); // 清除数组; TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } if ( PathFileExists(szOrderPath) ) { LoadSelectedImageDirectory(szOrderPath, AryOfSelectedImages, AryOfSelectedImagePaths); } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; nSize = m_pAryOfNetShareInfo->GetSize(); for ( int i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } // 订单文件夹存在; if ( PathFileExists(szOrderPath)) { LoadSelectedImageDirectory(szOrderPath, AryOfSelectedImages, AryOfSelectedImagePaths); } } } return TRUE; } /************************************************************************/ /* 函数:LoadOrderBySelectedImages 描述:按选中的相片顺序依次加载,相片名不带景点名套系名,如:"005" 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpDomain 域名; IN:AryOfSelectedImages 选中的相片数组; OUT:AryOfSelectedImagePaths 返回选中的相片的路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::LoadOrderBySelectedImages( IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, IN CStringArray& AryOfSelectedImages, OUT CStringArray& AryOfSelectedImagePaths) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { // 传入的域名有误; if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) return FALSE; } CStringArray strAryTemp; // 与AryOfSelectedImagePaths对应的临时储存; CStringArray strAryTemp1; // 与AryOfSelectedImages对应的临时储存; strAryTemp1.Copy(AryOfSelectedImages); int nSize = 0; CString strImage = _T(""); TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; AryOfSelectedImagePaths.RemoveAll(); // 清除数组; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } if ( PathFileExists(szOrderPath) ) LoadSelectedImageDirectory(szOrderPath, strAryTemp1, strAryTemp); #endif //#if USE_FIX_SHARE ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; int i = 0; nSize = m_pAryOfNetShareInfo->GetSize(); for ( i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); else _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); // 订单文件夹存在; if ( PathFileExists(szOrderPath)) LoadSelectedImageDirectory(szOrderPath, strAryTemp1, strAryTemp); } } // 再按顺序加入AryOfSelectedImagePaths; for ( /*int*/ i = 0; i < AryOfSelectedImages.GetSize(); i++) { // 先查看 // 如果某张相片没有找到对应的文件 BOOL bGetImage = FALSE; for ( int n = 0; n < strAryTemp.GetSize(); n++ ) { strImage = strAryTemp.ElementAt(n).Mid( strAryTemp.ElementAt(n).ReverseFind('\\') + 1); strImage = strImage.Left(strImage.Find('.')); CString strSelImage = AryOfSelectedImages.ElementAt(i); if ( strSelImage.CompareNoCase(strImage) == 0 ) { bGetImage = TRUE; AryOfSelectedImagePaths.Add(strAryTemp.ElementAt(n)); break; } } } return TRUE; } /************************************************************************/ /* 函数:LoadSelectedImagesEx 描述:加载选中的相片名(相片名前带子目录名,如:"内景\005") 参数: 返回: 示例: 注:这个景点名称必须是订单的一级子目录,不能是二级子目录; */ /************************************************************************/ BOOL CNetShareInfo::LoadSelectedImagesEx(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, IN CStringArray& AryOfSelectedImages, OUT CStringArray& AryOfSelectedImagePaths) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfSelectedImagePaths.RemoveAll(); // 清除数组; TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } printf("szOrderPath1 = %s\n", szOrderPath); if ( PathFileExists(szOrderPath) ) { //LoadSelectedImageDirectory(szOrderPath, AryOfSelectedImages, AryOfSelectedImagePaths); nSize = AryOfSelectedImages.GetSize(); for ( int i = 0; i < nSize; i++ ) { strImage.Format(_T("%s\\%s.jpg"), szOrderPath, AryOfSelectedImages.ElementAt(i)); printf("strImage1 = %s\n", strImage); if ( PathFileExists(strImage) ) { AryOfSelectedImagePaths.Add(strImage); } else { //查找所有子目录 CString strFilePath = _T(""); if(FindPhotoFromNo(AryOfSelectedImages.ElementAt(i), szOrderPath, strFilePath)) AryOfSelectedImagePaths.Add(strFilePath); } } } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; int i=0; /* for(i=0; iGetSize(); for ( i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } // printf("szOrderPath2 = %s\n", szOrderPath); // 订单文件夹存在; if ( PathFileExists(szOrderPath)) { //LoadSelectedImageDirectory(szOrderPath, AryOfSelectedImages, AryOfSelectedImagePaths); for ( int n = 0; n < AryOfSelectedImages.GetSize(); n++) { strImage.Format("%s\\%s.jpg",szOrderPath, AryOfSelectedImages.ElementAt(n)); // printf("strImage2 = %s\n", strImage); if ( PathFileExists(strImage) ) { AryOfSelectedImagePaths.Add(strImage); } else { //查找所有子目录 CString strFilePath = _T(""); if(FindPhotoFromNo(AryOfSelectedImages.ElementAt(n), szOrderPath, strFilePath)) AryOfSelectedImagePaths.Add(strFilePath); } } } } } return TRUE; } /************************************************************************/ /* 函数:GetOrderDirectory 描述:获取指定订单的全部共享路径; 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpDomain 域名; OUT:AryOfOrderDirectory 返回订单的全部共享路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::GetOrderDirectory(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpDomain, OUT CStringArray &AryOfOrderDirectory) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfOrderDirectory.RemoveAll(); TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } } if ( PathFileExists(szOrderPath) ) { AryOfOrderDirectory.Add(szOrderPath); } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; nSize = m_pAryOfNetShareInfo->GetSize(); for ( int i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum); } else { _stprintf(szOrderPath, _T("%s\\%s"), szShareDirectory, lpOrderNum); } // 订单文件夹存在; if ( PathFileExists(szOrderPath)) { AryOfOrderDirectory.Add(szOrderPath); } } } return TRUE; } /************************************************************************/ /* 函数:GetSceneryDirectory 描述:获取指定订单景点或套系名的全部共享路径; 参数: IN:nPhotoType 相片类型; IN:lpOrderNum 订单号; IN:lpScenery 景点或套系名; IN:lpDomain 域名; OUT:AryOfOrderDirectory 返回订单景点或套系名的全部共享路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::GetSceneryDirectory(IN CONST INT &nPhotoType, IN LPCTSTR lpOrderNum, IN LPCTSTR lpScenery, IN LPCTSTR lpDomain, OUT CStringArray &AryOfSceneryDirectory) { // 若域名非空,判断域名有效性; if ( lpDomain && strcmp(lpDomain,_T("")) != 0 ) { if(_tcsstr(lpDomain, _T(".ly.com")) == NULL) { // 传入的域名有误; return FALSE; } } int nSize = 0; CString strImage = _T(""); AryOfSceneryDirectory.RemoveAll(); TCHAR szOrderPath[MAX_PATH] = {0}; TCHAR szShareDirectory[MAX_PATH] = {0}; #if USE_FIX_SHARE // 2.查找早期的固定的原始共享目录; GetLoaclShareDirectory(nPhotoType, szShareDirectory); if ( lpDomain == NULL || lpDomain[0] == '\0') { // 分店域名空,代表本店; _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } else { // 若域名非空,则与本店比较,防止域名仍为本店; if ( strcmp(lpDomain, m_lpDomain) == 0 ) { // 本店域名; _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum, lpScenery); } } if ( PathFileExists(szOrderPath) ) { AryOfSceneryDirectory.Add(szOrderPath); } #endif ////////////////////////////////////////////////////////////////////////// // 查找其他共享目录是否存在订单文件夹; nSize = m_pAryOfNetShareInfo->GetSize(); for ( int i = 0; i < nSize; i++) { if ( nPhotoType == atoi(m_pAryOfNetShareInfo->ElementAt(i).ElementAt(5)) ) { // 逐一加载其他共享目录; _stprintf(szShareDirectory, _T("%s"), m_pAryOfNetShareInfo->ElementAt(i).ElementAt(2)); if (lpDomain && strcmp(lpDomain,"") != 0) { _stprintf(szOrderPath, _T("%s\\%s\\%s\\%s"), szShareDirectory, lpDomain, lpOrderNum, lpScenery); } else { _stprintf(szOrderPath, _T("%s\\%s\\%s"), szShareDirectory, lpOrderNum, lpScenery); } // 订单文件夹存在; if ( PathFileExists(szOrderPath)) { AryOfSceneryDirectory.Add(szOrderPath); } } } return TRUE; } /************************************************************************/ /* 函数:LoadSpecifiedDirectories 描述:加载指定目录集下的全部相片; 参数: IN:AryOfDirectories 指定目录集合; IN:AryOfRetval 返回目录集合下的所有相片路径; 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::LoadSpecifiedDirectories(IN CStringArray &AryOfDirectories, IN CStringArray &AryOfRetval) { CString str = _T(""); int nSize = AryOfDirectories.GetSize(); for ( int i = 0; i < nSize; i++ ) { str = AryOfDirectories.ElementAt(i); LoadSpecifiedDirectory(str,AryOfRetval); } return TRUE; } // /************************************************************************/ /* 函数:FindPhotoFromNo 描述:查找订单目录下的相片是否存在; 参数: IN CString& strName, 相片名 IN LPCTSTR strDir 目录 返回: 示例: 注意: */ /************************************************************************/ BOOL CNetShareInfo::FindPhotoFromNo(IN CString& strName, IN LPCTSTR lpDir, OUT CString& strFilePath) { BOOL bFind = FALSE; if(strName == _T("") || lpDir == NULL) return bFind; using namespace helper_coffs; ffsco o; o.dirs(1); o.find(lpDir, LPCSTR("*.*")); ffsco::typeT cfs; ffsco::typeT::iterator it; cfs = o.co_file(); // printf("strName = %s\n", strName); CString strFile = _T(""); for (it = cfs.begin(); cfs.end() != it; it++) { // 去除目录级文件; // 去除ok文件; // 去除modifytime文件; // 去除s+m缩略图; strFile = it->c_str(); strFile.MakeLower(); if ( strFile.Find('.') == -1) { it = cfs.erase(it); continue; } CString str = strFile.Mid( strFile.ReverseFind('\\') + 1 ); if ( str.Find('.') == -1) { it = cfs.erase(it); continue; } // 如果在相片前或后加修饰,都会有bug,最佳做法是缩略图放在另一子文件夹中;\ // 产生的bug:使用原名导入相片时,相片名可能第一个字母就是s或m; if ( str.GetAt(0) == 's' || str.GetAt(0) == 'm') { it = cfs.erase(it); continue; } // printf("str = %s, strName = %s\n", str, strName + _T(".jpg")); if(str.CompareNoCase(strName + _T(".jpg")) == 0) bFind = TRUE; else if(str.CompareNoCase(strName + _T(".jpeg")) == 0) bFind = TRUE; else if(str.CompareNoCase(strName + _T(".cr2")) == 0) bFind = TRUE; else if(str.CompareNoCase(strName + _T(".raw")) == 0) bFind = TRUE; else if(str.CompareNoCase(strName + _T(".nef")) == 0) bFind = TRUE; if(bFind == TRUE) { // printf("it = %s, strName = %s\n", it->c_str(), strName); strFilePath = it->c_str(); return bFind; } } return bFind; }