static bool IsPartOfMultipartArchive(const StlString& fname) { StlString fname_nopath; size_t last_slash_pos = fname.find_last_of(_T('\\')); if (fname.size() == last_slash_pos) { LOG(("[IsPartOfMultipartArchive] ERROR: wrong file name: %S\n", (wstring(fname.begin(), fname.end())).c_str())); return false; } fname_nopath = (StlString::npos == last_slash_pos) ? fname : fname.substr(last_slash_pos + 1); boost::tregex re(_T("(.*)(\\.part)([0-9]+)(\\.rar)"), boost::tregex::perl|boost::tregex::icase); bool ret_val = false; if (boost::regex_match(fname_nopath, re)) { size_t pos; pos = fname_nopath.find_last_of(_T('.')); if (StlString::npos != pos) { StlString tmp = fname_nopath.substr(0, pos); pos = tmp.find_last_of(_T(".part")); if (StlString::npos != pos && pos < tmp.size() - 1) { tmp = tmp.substr(pos + 1); int part_num = _ttoi(tmp.c_str()); ret_val = (part_num != 1); } } } return ret_val; }