public static bool TryLoadMsflPriceInfo( string stockName, string stockSymbol, string strFilePath, out MSFL.MSFLPriceRecord[] msflPriceRecordArray ) { msflPriceRecordArray = new MSFL.MSFLPriceRecord[0]; string strStockCode = GetStockCode( stockName, stockSymbol ); if ( s_PriceDictionary.TryGetValue( strStockCode, out msflPriceRecordArray ) == true ) return true; if ( Directory.Exists( strFilePath ) == false ) return false; byte dirNumber = 0; int iErr = MSFL.MSFL1_OpenDirectory( strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return false; MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf( msflDirectoryStatus ); iErr = MSFL.MSFL1_GetDirectoryStatus( dirNumber, string.Empty, ref msflDirectoryStatus ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return false; if ( msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false ) return false; MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); iErr = MSFL.MSFL1_GetFirstSecurityInfo( dirNumber, ref msflSecurityInfo ); while ( iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) { if ( msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol ) { iErr = MSFL.MSFL1_LockSecurity( msflSecurityInfo.hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; ushort wPriceRecCount = 0; iErr = MSFL.MSFL1_GetDataRecordCount( msflSecurityInfo.hSecurity, ref wPriceRecCount ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; if ( wPriceRecCount > 0 ) { iErr = MSFL.MSFL1_SeekBeginData( msflSecurityInfo.hSecurity ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; MSFL.DateTime sDateTime = new MSFL.DateTime(); msflPriceRecordArray = new MSFL.MSFLPriceRecord[wPriceRecCount]; iErr = MSFL.MSFL2_ReadMultipleRecs( msflSecurityInfo.hSecurity, msflPriceRecordArray, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; // Unlock the security (we're done using it) iErr = MSFL.MSFL1_UnlockSecurity( msflSecurityInfo.hSecurity ); iErr = MSFL.MSFL1_CloseDirectory( dirNumber ); s_PriceDictionary.Add( strStockCode, msflPriceRecordArray ); return true; } break; } if ( iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) break; iErr = MSFL.MSFL1_GetNextSecurityInfo( msflSecurityInfo.hSecurity, ref msflSecurityInfo ); } MSFL.MSFL1_CloseDirectory( dirNumber ); return false; }
public static bool TryLoadMsflSecurityInfo( string strFilePath, out MSFL.MSFLSecurityInfo[] msflSecurityInfoArray ) { msflSecurityInfoArray = new MSFL.MSFLSecurityInfo[0]; if ( s_SecurityDictionary.TryGetValue( strFilePath, out msflSecurityInfoArray ) == true ) return true; if ( Directory.Exists( strFilePath ) == false ) return false; byte dirNumber = 0; int iErr = MSFL.MSFL1_OpenDirectory( strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return false; MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf( msflDirectoryStatus ); iErr = MSFL.MSFL1_GetDirectoryStatus( dirNumber, string.Empty, ref msflDirectoryStatus ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return false; if ( msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false ) return false; List<MSFL.MSFLSecurityInfo> msflSecurityInfoList = new List<MSFL.MSFLSecurityInfo>(); MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); iErr = MSFL.MSFL1_GetFirstSecurityInfo( dirNumber, ref msflSecurityInfo ); while ( iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) { msflSecurityInfoList.Add( msflSecurityInfo ); if ( iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) break; msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); iErr = MSFL.MSFL1_GetNextSecurityInfo( msflSecurityInfo.hSecurity, ref msflSecurityInfo ); } MSFL.MSFL1_CloseDirectory( dirNumber ); msflSecurityInfoArray = msflSecurityInfoList.ToArray(); s_SecurityDictionary.Add( strFilePath, msflSecurityInfoArray ); return true; }
private void Process_LoadNewDocument( ProcessForm processForm ) { if ( m_DirNumber != 0 ) { MSFL.MSFL1_CloseDirectory( m_DirNumber ); m_SecurityDictionary.Clear(); m_DirNumber = 0; } do { int iErr = MSFL.MSFL1_OpenDirectory( m_strSelectedPath, ref m_DirNumber, MSFL.MSFL_DIR_FORCE_USER_IN ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf( msflDirectoryStatus ); iErr = MSFL.MSFL1_GetDirectoryStatus( m_DirNumber, string.Empty, ref msflDirectoryStatus ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) break; //MSFL.DisplayMSFLError( iErr ); List<MSFL.MSFLSecurityInfo> listMSFLSecurityInfo = new List<MSFL.MSFLSecurityInfo>( 1024 ); MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); if ( msflDirectoryStatus.bExists && // if it exists msflDirectoryStatus.bOpen && // AND if it's open msflDirectoryStatus.bMetaStockDir ) // AND if it's a MetaStock directory... { StringBuilder dateString = new StringBuilder( MSFL.MSFL_MAX_NAME_LENGTH + 1 ); iErr = MSFL.MSFL1_GetFirstSecurityInfo( m_DirNumber, ref msflSecurityInfo ); while ( iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) { //m_SecurityDictionary.Add( listViewItem, msflSecurityInfo.hSecurity ); listMSFLSecurityInfo.Add( msflSecurityInfo ); if ( iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) break; msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); iErr = MSFL.MSFL1_GetNextSecurityInfo( msflSecurityInfo.hSecurity, ref msflSecurityInfo ); } } MSFL.MSFLSecurityInfo[] msflSecurityInfoArray = listMSFLSecurityInfo.ToArray(); if ( msflSecurityInfoArray.Length <= 0 ) break; KLineViewFormSubForm klineViewFormSubForm = new KLineViewFormSubForm( msflSecurityInfoArray ); if ( klineViewFormSubForm.ShowDialog() == DialogResult.OK ) { msflSecurityInfoArray = klineViewFormSubForm.ToSecurityInfo(); if ( msflSecurityInfoArray.Length > 0 ) { for ( int iIndex = 0; iIndex < msflSecurityInfoArray.Length; iIndex++ ) { MSFL.MSFLSecurityInfo msflSecurityInfoIndex = msflSecurityInfoArray[iIndex]; KLineViewFormDocument frmDocument = new KLineViewFormDocument( msflSecurityInfoIndex ); frmDocument.MdiParent = this; frmDocument.Text = msflSecurityInfoIndex.szName + "[" + msflSecurityInfoIndex.szSymbol + "]"; frmDocument.Show(); } } } } while ( false ); processForm.EndProcessForm(); }
private void OpenToolStripMenuItem_Click( object sender, EventArgs e ) { if ( this.FolderBrowserDialogView.ShowDialog() != DialogResult.OK ) return; if ( m_DirNumber != 0 ) { MSFL.MSFL1_CloseDirectory( m_DirNumber ); this.ListViewSecurity.VirtualListSize = 0; this.ListViewSecurity.Items.Clear(); this.ListViewPrice.VirtualListSize = 0; this.ListViewPrice.Items.Clear(); m_SecurityDictionary.Clear(); m_DirNumber = 0; } int iErr = MSFL.MSFL1_OpenDirectory( this.FolderBrowserDialogView.SelectedPath, ref m_DirNumber, MSFL.MSFL_DIR_FORCE_USER_IN ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return; MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf( msflDirectoryStatus ); iErr = MSFL.MSFL1_GetDirectoryStatus( m_DirNumber, string.Empty, ref msflDirectoryStatus ); if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR ) return; //MSFL.DisplayMSFLError( iErr ); MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo ); List<ListViewItem> listViewItemList = new List<ListViewItem>( 2048 ); if ( msflDirectoryStatus.bExists && // if it exists msflDirectoryStatus.bOpen && // AND if it's open msflDirectoryStatus.bMetaStockDir ) // AND if it's a MetaStock directory... { StringBuilder dateString = new StringBuilder( MSFL.MSFL_MAX_NAME_LENGTH + 1 ); iErr = MSFL.MSFL1_GetFirstSecurityInfo( m_DirNumber, ref msflSecurityInfo ); while ( iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) { ListViewItem listViewItem = new ListViewItem(msflSecurityInfo.szName); ListViewItem.ListViewSubItem subListViewItem1 = new ListViewItem.ListViewSubItem( listViewItem, msflSecurityInfo.szSymbol ); ListViewItem.ListViewSubItem subListViewItem2 = new ListViewItem.ListViewSubItem( listViewItem, msflSecurityInfo.cPeriodicity.ToString() ); iErr = MSFL.MSFL1_FormatDate( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstDate ); ListViewItem.ListViewSubItem subListViewItem3 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatDate( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastDate ); ListViewItem.ListViewSubItem subListViewItem4 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatTime( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstTime, true ); ListViewItem.ListViewSubItem subListViewItem5 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatTime( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastTime, true ); ListViewItem.ListViewSubItem subListViewItem6 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatTime( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lStartTime, false ); ListViewItem.ListViewSubItem subListViewItem7 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatTime( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lEndTime, false ); ListViewItem.ListViewSubItem subListViewItem8 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); iErr = MSFL.MSFL1_FormatDate( dateString, (ushort)dateString.Capacity, msflSecurityInfo.lCollectionDate ); ListViewItem.ListViewSubItem subListViewItem9 = new ListViewItem.ListViewSubItem( listViewItem, dateString.ToString() ); listViewItem.SubItems.Add( subListViewItem1 ); listViewItem.SubItems.Add( subListViewItem2 ); listViewItem.SubItems.Add( subListViewItem3 ); listViewItem.SubItems.Add( subListViewItem4 ); listViewItem.SubItems.Add( subListViewItem5 ); listViewItem.SubItems.Add( subListViewItem6 ); listViewItem.SubItems.Add( subListViewItem7 ); listViewItem.SubItems.Add( subListViewItem8 ); listViewItem.SubItems.Add( subListViewItem9 ); m_SecurityDictionary.Add( listViewItem, msflSecurityInfo.hSecurity ); //this.ListViewSecurity.Items.Add( listViewItem ); listViewItemList.Add( listViewItem ); if ( iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR ) break; iErr = MSFL.MSFL1_GetNextSecurityInfo( msflSecurityInfo.hSecurity, ref msflSecurityInfo ); } m_SecurityArray = listViewItemList.ToArray(); this.ListViewSecurity.VirtualListSize = m_SecurityArray.Length; } }
public static bool TryLoadMsflPriceInfo(string stockName, string stockSymbol, string strFilePath, out MSFL.MSFLPriceRecord[] msflPriceRecordArray) { msflPriceRecordArray = new MSFL.MSFLPriceRecord[0]; string strStockCode = GetStockCode(stockName, stockSymbol); if (s_PriceDictionary.TryGetValue(strStockCode, out msflPriceRecordArray) == true) { return(true); } if (Directory.Exists(strFilePath) == false) { return(false); } byte dirNumber = 0; int iErr = MSFL.MSFL1_OpenDirectory(strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { return(false); } MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf(msflDirectoryStatus); iErr = MSFL.MSFL1_GetDirectoryStatus(dirNumber, string.Empty, ref msflDirectoryStatus); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { return(false); } if (msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false) { return(false); } MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf(msflSecurityInfo); iErr = MSFL.MSFL1_GetFirstSecurityInfo(dirNumber, ref msflSecurityInfo); while (iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR) { if (msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol) { iErr = MSFL.MSFL1_LockSecurity(msflSecurityInfo.hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { break; } ushort wPriceRecCount = 0; iErr = MSFL.MSFL1_GetDataRecordCount(msflSecurityInfo.hSecurity, ref wPriceRecCount); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { break; } if (wPriceRecCount > 0) { iErr = MSFL.MSFL1_SeekBeginData(msflSecurityInfo.hSecurity); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { break; } MSFL.DateTime sDateTime = new MSFL.DateTime(); msflPriceRecordArray = new MSFL.MSFLPriceRecord[wPriceRecCount]; iErr = MSFL.MSFL2_ReadMultipleRecs(msflSecurityInfo.hSecurity, msflPriceRecordArray, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { break; } // Unlock the security (we're done using it) iErr = MSFL.MSFL1_UnlockSecurity(msflSecurityInfo.hSecurity); iErr = MSFL.MSFL1_CloseDirectory(dirNumber); s_PriceDictionary.Add(strStockCode, msflPriceRecordArray); return(true); } break; } if (iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR) { break; } iErr = MSFL.MSFL1_GetNextSecurityInfo(msflSecurityInfo.hSecurity, ref msflSecurityInfo); } MSFL.MSFL1_CloseDirectory(dirNumber); return(false); }
public static bool TryLoadMsflSecurityInfo(string strFilePath, out MSFL.MSFLSecurityInfo[] msflSecurityInfoArray) { msflSecurityInfoArray = new MSFL.MSFLSecurityInfo[0]; if (s_SecurityDictionary.TryGetValue(strFilePath, out msflSecurityInfoArray) == true) { return(true); } if (Directory.Exists(strFilePath) == false) { return(false); } byte dirNumber = 0; int iErr = MSFL.MSFL1_OpenDirectory(strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { return(false); } MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus(); msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf(msflDirectoryStatus); iErr = MSFL.MSFL1_GetDirectoryStatus(dirNumber, string.Empty, ref msflDirectoryStatus); if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR) { return(false); } if (msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false) { return(false); } List <MSFL.MSFLSecurityInfo> msflSecurityInfoList = new List <MSFL.MSFLSecurityInfo>(); MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf(msflSecurityInfo); iErr = MSFL.MSFL1_GetFirstSecurityInfo(dirNumber, ref msflSecurityInfo); while (iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR) { msflSecurityInfoList.Add(msflSecurityInfo); if (iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR) { break; } msflSecurityInfo = new MSFL.MSFLSecurityInfo(); msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf(msflSecurityInfo); iErr = MSFL.MSFL1_GetNextSecurityInfo(msflSecurityInfo.hSecurity, ref msflSecurityInfo); } MSFL.MSFL1_CloseDirectory(dirNumber); msflSecurityInfoArray = msflSecurityInfoList.ToArray(); s_SecurityDictionary.Add(strFilePath, msflSecurityInfoArray); return(true); }