void CAbstractFile::SetFileName(LPCTSTR pszFileName, bool bReplaceInvalidFileSystemChars, bool bAutoSetFileType, bool bRemoveControlChars) { m_strFileName = pszFileName; if (bReplaceInvalidFileSystemChars){ m_strFileName.Replace(_T('/'), _T('-')); m_strFileName.Replace(_T('>'), _T('-')); m_strFileName.Replace(_T('<'), _T('-')); m_strFileName.Replace(_T('*'), _T('-')); m_strFileName.Replace(_T(':'), _T('-')); m_strFileName.Replace(_T('?'), _T('-')); m_strFileName.Replace(_T('\"'), _T('-')); m_strFileName.Replace(_T('\\'), _T('-')); m_strFileName.Replace(_T('|'), _T('-')); } if (bAutoSetFileType) SetFileType(GetFileTypeByName(m_strFileName)); if (bRemoveControlChars){ for (int i = 0; i < m_strFileName.GetLength(); ) if (m_strFileName.GetAt(i) <= '\x1F') m_strFileName.Delete(i); else i++; } }
CCollectionFile::CCollectionFile(CFileDataIO* in_data) { UINT tagcount = in_data->ReadUInt32(); for (UINT i = 0; i < tagcount; i++) { CTag* toadd = new CTag(in_data, true); if (toadd) taglist.Add(toadd); } CTag* pTagHash = GetTag(FT_FILEHASH); if(pTagHash) SetFileHash(pTagHash->GetHash()); else ASSERT(0); // here we have two choices // - if the server/client sent us a filetype, we could use it (though it could be wrong) // - we always trust our filetype list and determine the filetype by the extension of the file // // if we received a filetype from server, we use it. // if we did not receive a filetype, we determine it by examining the file's extension. // // but, in no case, we will use the receive file type when adding this search result to the download queue, to avoid // that we are using 'wrong' file types in part files. (this has to be handled when creating the part files) const CString& rstrFileType = GetStrTagValue(FT_FILETYPE); SetFileName(GetStrTagValue(FT_FILENAME), false, rstrFileType.IsEmpty()); SetFileSize(GetIntTagValue(FT_FILESIZE)); if (!rstrFileType.IsEmpty()) { if (_tcscmp(rstrFileType, _T(ED2KFTSTR_PROGRAM))==0) { CString strDetailFileType = GetFileTypeByName(GetFileName()); if (!strDetailFileType.IsEmpty()) SetFileType(strDetailFileType); else SetFileType(rstrFileType); } else SetFileType(rstrFileType); } if(!GetFileSize() || !GetFileName().Compare(_T(""))) ASSERT(0); }