替换文件夹中所有文件部分文件名
void ReplaceFileName(LPCTSTR lpszFolder, LPCTSTR lpszOldString, LPCTSTR lpszNewString)
{
CString strFolder = lpszFolder;
strFolder += _T("\\*.*");
CFileFind ff;
BOOL bResult = ff.FindFile(strFolder);
while(bResult)
{
bResult = ff.FindNextFile();
if(!bResult)
break;
if (ff.IsDots() || ff.IsSystem() || ff.IsHidden())
continue;
if(ff.IsDirectory())
{
ReplaceFileName(ff.GetFilePath(), lpszOldString, lpszNewString);
}
else
{
CString strFileName = ff.GetFilePath();
CString strNewName = strFileName;
strNewName.Replace(lpszOldString, lpszNewString);
CFile::Rename(strFileName, strNewName);
}
}
}
VC HTTP 上传文件
BOOL UploadFile(LPCTSTR lpszFilePath, LPCTSTR lpszURL)
{
BOOL bResult = FALSE;
HANDLE hFile = CreateFile(lpszFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
TCHAR szScheme[_MAX_PATH];
TCHAR szUserName[_MAX_PATH];
TCHAR szPassword[_MAX_PATH];
TCHAR szHostName[_MAX_PATH];
TCHAR szUrlPath[_MAX_PATH];
TCHAR szExtraInfo[_MAX_PATH];
URL_COMPONENTS url;
memset(&url, 0, sizeof(URL_COMPONENTS));
url.dwStructSize = sizeof(URL_COMPONENTS);
url.lpszScheme = szScheme;
url.dwSchemeLength = _MAX_PATH;
url.lpszHostName = szHostName;
url.dwHostNameLength = _MAX_PATH;
url.lpszUserName = szUserName;
url.dwUserNameLength = _MAX_PATH;
url.lpszPassword = szPassword;
url.dwPasswordLength = _MAX_PATH;
url.lpszUrlPath = szUrlPath;
url.dwUrlPathLength = _MAX_PATH;
url.lpszExtraInfo = szExtraInfo;
url.dwExtraInfoLength = _MAX_PATH;
if (InternetCrackUrl(lpszURL, 0, 0, &url))
{
HINTERNET hSession = NULL, hConnect = NULL;
hSession = InternetOpen(_T("test"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
hConnect = InternetConnect(hSession, szHostName, url.nPort,
NULL, NULL, INTERNET_SERVICE_HTTP, INTERNET_FLAG_NO_CACHE_WRITE, NULL);
if (hConnect)
{
INTERNET_BUFFERS BufferIn = { 0 };
DWORD dwBytesRead;
DWORD dwBytesWritten;
BYTE pBuffer[1024]; // Read from file in 1K chunks
BOOL bRead, bRet;
BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS);
CString strRemotePath;
strRemotePath.Format(_T("%s/%s"), szUrlPath + 1, _tcsrchr(lpszFilePath, '\\') + 1);
HINTERNET hRequest = HttpOpenRequest(hConnect, _T("PUT"), strRemotePath,
NULL, NULL, NULL, 0, 0);
if (hRequest)
{
BufferIn.dwBufferTotal = GetFileSize(hFile, NULL);
if (HttpSendRequestEx(hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
{
DWORD sum = 0;
UINT uProgress = 0, uNowProgress = 0;
DWORD dwKB = BufferIn.dwBufferTotal >> 10;
TCHAR szText[64];
do
{
if (!(bRead = ReadFile(hFile, pBuffer, sizeof(pBuffer),
&dwBytesRead, NULL)))
{
break;
}
if (dwBytesRead == 0)
break;
if (!(bRet = InternetWriteFile(hRequest, pBuffer, dwBytesRead,
&dwBytesWritten)))
{
break;
}
sum += dwBytesWritten;
uNowProgress = sum * 100 / BufferIn.dwBufferTotal;
TRACE(_T("uploading %d %d\n"), BufferIn.dwBufferTotal, sum);
if (uNowProgress != uProgress)
{
uProgress = uNowProgress;
//_stprintf(szText, _T("共%d KB 已上传 %%%d."), dwKB, uProgress);
//m_scState.SetWindowText(szText);
}
} while (true);
if (sum >= BufferIn.dwBufferTotal)
{
bResult = TRUE;
}
if (!HttpEndRequest(hRequest, NULL, 0, 0))
{
TRACE(_T("HttpEndRequest error code %d.\n"), GetLastError());
}
}
}
}
}
CloseHandle(hFile);
}
return bResult;
}