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;
        }
        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;
        }
Exemple #3
0
        public static bool LoadFileFormatForMetaStock(string stockName, string stockSymbol, string strFilePath, ref StockInfo stockInfo)
        {
            MSFL.MSFLSecurityInfo[] msflSecurityInfoArray = null;
            if (GlobalSetting.TryLoadMsflSecurityInfo(strFilePath, out msflSecurityInfoArray) == false)
            {
                return(false);
            }

            int           iErr       = (int)MSFL.MSFL_ERR.MSFL_NO_ERR;
            StringBuilder dateString = new StringBuilder(MSFL.MSFL_MAX_NAME_LENGTH + 1);

            for (int iIndex = 0; iIndex < msflSecurityInfoArray.Length; iIndex++)
            {
                MSFL.MSFLSecurityInfo msflSecurityInfo = msflSecurityInfoArray[iIndex];

                if (msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol)
                {
                    stockInfo.m_StockCode = GlobalSetting.GetStockCode(msflSecurityInfo.szName, msflSecurityInfo.szSymbol);

                    stockInfo.m_StockName   = msflSecurityInfo.szName;
                    stockInfo.m_StockSymbol = msflSecurityInfo.szSymbol;

                    stockInfo.m_Periodicity = msflSecurityInfo.cPeriodicity;

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstDate);
                    stockInfo.m_FirstDate = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastDate);
                    stockInfo.m_LastDate = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstTime, true);
                    string strFirstTime = dateString.ToString();
                    strFirstTime          = strFirstTime.Substring(0, strFirstTime.Length - 1);
                    stockInfo.m_FirstTime = DateTime.Parse(strFirstTime);

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastTime, true);
                    string strLastTime = dateString.ToString();
                    strLastTime          = strLastTime.Substring(0, strLastTime.Length - 1);
                    stockInfo.m_LastTime = DateTime.Parse(strLastTime);

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lStartTime, false);
                    stockInfo.m_StartTime = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lEndTime, false);
                    stockInfo.m_EndTime = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lCollectionDate);
                    stockInfo.m_CollectionDate = DateTime.Parse(dateString.ToString());


                    MSFL.MSFLPriceRecord[] msflPriceInfoArray = null;
                    if (GlobalSetting.TryLoadMsflPriceInfo(stockName, stockSymbol, strFilePath, out msflPriceInfoArray) == false)
                    {
                        return(true);
                    }

                    // numbers for summing price info
                    float fOpenSum = 0.0f, fHighSum = 0.0f, fLowSum = 0.0f, fCloseSum = 0.0f, fVolumeSum = 0.0f, fOpenIntSum = 0.0f;

                    StringBuilder szBuf = new StringBuilder(MSFL.MSFL_MAX_NAME_LENGTH + 1);
                    for (int iIndex2 = 0; iIndex2 < msflPriceInfoArray.Length; iIndex2++)
                    {
                        MSFL.MSFLPriceRecord msflPriceRecord = msflPriceInfoArray[iIndex2];

                        StockData stockData = new StockData();

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_DATE) == MSFL.MSFL_DATA_DATE)
                        {
                            iErr = MSFL.MSFL1_FormatDate(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lDate);
                            stockData.TradingDate = DateTime.Parse(szBuf.ToString());
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_TIME) == MSFL.MSFL_DATA_TIME)
                        {
                            iErr = MSFL.MSFL1_FormatTime(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lTime, true);
                            string strTradingTime = szBuf.ToString();
                            strTradingTime        = strLastTime.Substring(0, strTradingTime.Length - 1);
                            stockData.TradingTime = DateTime.Parse(strTradingTime);
                        }

                        stockData.TradingDateTime = stockData.TradingDate + stockData.TradingTime.TimeOfDay;
                        //Debug.WriteLine( stockData.TradingDateTime.ToString() );

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPEN) == MSFL.MSFL_DATA_OPEN)
                        {
                            fOpenSum           += msflPriceRecord.fOpen;
                            stockData.OpenPrice = msflPriceRecord.fOpen;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_HIGH) == MSFL.MSFL_DATA_HIGH)
                        {
                            fHighSum += msflPriceRecord.fHigh;
                            stockData.HighestPrice = msflPriceRecord.fHigh;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_LOW) == MSFL.MSFL_DATA_LOW)
                        {
                            fLowSum += msflPriceRecord.fLow;
                            stockData.MinimumPrice = msflPriceRecord.fLow;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_CLOSE) == MSFL.MSFL_DATA_CLOSE)
                        {
                            fCloseSum           += msflPriceRecord.fClose;
                            stockData.ClosePrice = msflPriceRecord.fClose;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_VOLUME) == MSFL.MSFL_DATA_VOLUME)
                        {
                            fVolumeSum += msflPriceRecord.fVolume;
                            stockData.TradingVolume = msflPriceRecord.fVolume;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPENINT) == MSFL.MSFL_DATA_OPENINT)
                        {
                            fOpenIntSum           += msflPriceRecord.fOpenInt;
                            stockData.OpenInterest = msflPriceRecord.fOpenInt;
                        }

                        stockInfo.AddStockData(stockData);
                    }

                    return(true);
                }
            }

            return(false);
        }
        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;
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }