Esempio n. 1
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);
        }
Esempio n. 2
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);
        }