没有调试时,没有完全保存准备好的String

时间:2016-03-08 17:20:41

标签: c# c#-4.0

我有一个程序,它应该将永久值保存到.txt文件中。当我通过在代码中放置一个断点来调试它时它工作正常。但是当它让它工作一段时间它只会保存最后捕获的值而不是最后一个值。

方法using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Bot_V1._0 { public class SaveAllMinuteBarsStrategy : IStrategy { public Guid StrategyGuid { get; set; } //private static string[] Data = new string[8]; private string DataDax { get; set; } private string DataDow { get; set; } private string DataOil { get; set; } private string DataGold { get; set; } private string DataSpy { get; set; } private string DataEsd { get; set; } private string DataEgp { get; set; } private string DataUpy { get; set; } private string xPath = @"G:\TradingBot\Saved Candles folder"; private DateTime firstEnter; const char LF = '\n'; public SaveAllMinuteBarsStrategy (Guid StrategyCGuid) { this.StrategyGuid = StrategyGuid; } public List<ShareAndTimeRange> InitStrategy (Guid stratGuid) { firstEnter = DateTime.Now; var Dax = new ShareAndTimeRange("DAX", 1, stratGuid, null, false); var Dow = new ShareAndTimeRange("DOW", 1, stratGuid, null, false); var Oil = new ShareAndTimeRange("OIL", 1, stratGuid, null, false); var Gold = new ShareAndTimeRange("GOLD", 1, stratGuid, null, false); var Spy = new ShareAndTimeRange("SPY", 1, stratGuid, null, false); var Esd = new ShareAndTimeRange("EUR/USD", 1, stratGuid, null, false); var Egb = new ShareAndTimeRange("EUR/GBP", 1, stratGuid, null, false); var Ujp = new ShareAndTimeRange("USD/JPY", 1, stratGuid, null, false); var ElementList = new List<ShareAndTimeRange>(); ElementList.Add(Dax); ElementList.Add(Dow); ElementList.Add(Oil); ElementList.Add(Gold); ElementList.Add(Spy); ElementList.Add(Esd); ElementList.Add(Egb); ElementList.Add(Ujp); return ElementList; } public void ExecuteStrategy(ShareAndTimeRange Share) { SaveDataHourly(Share); } private void SaveDataHourly(ShareAndTimeRange Share) { if (Share.Candle == null) return; var PreparedString = Share.Candle.Time.ToString("yyyyMMdd HHmmss") + ";"; PreparedString = PreparedString + Share.Candle.Open + ";" + Share.Candle.High + ";"; PreparedString = PreparedString + Share.Candle.Low + ";" + Share.Candle.Close; PreparedString = PreparedString + LF; switch (Share.ShareName) { case ("DAX"): { DataDax = DataDax + PreparedString; //Data[0] = Data[0] + bool reset = HDMYSaving(Share, DataDax); if (reset) DataDax = ""; break; } case ("DOW"): { DataDow = DataDow + PreparedString; bool reset = HDMYSaving(Share, DataDow); if (reset) DataDow = ""; break; } case ("OIL"): { DataOil = DataOil + PreparedString; bool reset = HDMYSaving(Share, DataOil); if (reset) DataOil = ""; break; } case ("GOLD"): { DataGold = DataGold + PreparedString; bool reset = HDMYSaving(Share, DataGold); if (reset) DataGold = ""; break; } case ("SPY"): { DataSpy = DataSpy + PreparedString; bool reset = HDMYSaving(Share, DataSpy); if (reset) DataSpy = ""; break; } case ("EUR/USD"): { DataEsd = DataEsd + PreparedString; bool reset = HDMYSaving(Share, DataEsd); if (reset) DataEsd = ""; break; } case ("EUR/GBP"): { DataEgp = DataEgp + PreparedString; bool reset = HDMYSaving(Share, DataEgp); if (reset) DataEgp = ""; break; } case ("USD/JPY"): { DataUpy = DataUpy + PreparedString; bool reset = HDMYSaving(Share, DataUpy); if (reset) DataUpy = ""; break; } } } private void SavePersistentData (string FolderName , string FileName, string Share ) { if (!System.IO.File.Exists(FolderName)) { Directory.CreateDirectory(FolderName); } string fullPath = System.IO.Path.Combine(FolderName, FileName); if (!System.IO.File.Exists(fullPath)) { FileStream fs = File.Create(fullPath); fs.Dispose(); } using (StreamWriter sw = new StreamWriter(fullPath, false)) { sw.Write(Share); sw.Dispose(); } //System.IO.File.WriteAllText(fullPath, Share); } private void SavePersistent (string ReadFolder , string WriteFolder , string WriteFolderFile) { DirectoryInfo ParDir = new DirectoryInfo(ReadFolder); string dat = ""; foreach (var item in ParDir.GetFiles()) { var elem = System.IO.Path.Combine(ReadFolder, item.Name); dat += System.IO.File.ReadAllText(elem); } SavePersistentData(WriteFolder, WriteFolderFile, dat); foreach (var item in ParDir.GetFiles()) { var del = System.IO.Path.Combine(ReadFolder, item.Name); File.Delete(del); } } private bool HDMYSaving(ShareAndTimeRange Share, string Values) { if (Share.Candle == null) return false; bool toReset = false; string SharePath = System.IO.Path.Combine(xPath, Share.ShareName);//c:\TradingBot\Saved Candles folder\"Sharename"\ string HourPath = System.IO.Path.Combine(SharePath, "Hour Data");//c:\TradingBot\Saved Candles folder\"Sharename"\Hour Data int res; int resuzt = Math.DivRem(Share.Candle.Time.Minute,3,out res); if ( res == 0) //0 Share.Candle.Time.Minute == 0 { DateTime DateToWriteH = Share.Candle.Time; string HourFilePath = DateToWriteH.ToString("yyyyMMddHHmm") + ".txt"; SavePersistentData(HourPath, HourFilePath, Values); toReset = true; } DateTime DateToWriteD = Share.Candle.Time.AddDays(-1); string DayPath = System.IO.Path.Combine(SharePath, "Day Data");//c:\TradingBot\Saved Candles folder\"Sharename"\Day Data string DayFilePath = System.IO.Path.Combine(DayPath, DateToWriteD.ToString("yyyyMMdd") + ".txt"); if (Share.Candle.Time.Hour == 0 && Share.Candle.Time.Minute == 0 && !System.IO.File.Exists(DayFilePath)) { SavePersistent(HourPath, DayPath, DateToWriteD.ToString("yyyyMMdd") + ".txt"); } DateTime DateToWriteM = Share.Candle.Time.AddMonths(-1); string MonthPath = System.IO.Path.Combine(SharePath, "Month Data");//c:\TradingBot\Saved Candles folder\"Sharename"\Month Data string MonthFilePath = System.IO.Path.Combine(MonthPath, DateToWriteM.ToString("yyyyMM") + ".txt"); if (Share.Candle.Time.Day == 1 && Share.Candle.Time.Hour == 0 && Share.Candle.Time.Minute == 0 && !System.IO.File.Exists(MonthFilePath)) { SavePersistent(DayPath, MonthPath, DateToWriteM.ToString("yyyyMM") + ".txt"); } DateTime DateToWriteY = Share.Candle.Time.AddYears(-1); string YearPath = System.IO.Path.Combine(SharePath, "Year Data");//c:\TradingBot\Saved Candles folder\"Sharename"\Year Data string YearFilePath = System.IO.Path.Combine(YearPath, DateToWriteY.ToString("yyyy") + ".txt"); if (Share.Candle.Time.Month == 1 && Share.Candle.Time.Day == 1 && Share.Candle.Time.Hour == 0 && Share.Candle.Time.Minute == 0 && !System.IO.File.Exists(YearFilePath)) { SavePersistent(MonthPath, YearPath, DateToWriteY.ToString("yyyy") + ".txt"); } return toReset; } } 每分钟都在执行一次。

以下是代码:

System.out.println(...)

是否存在每2秒或每分钟发射大量事件的问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。它是在另一个班级。每次程序收集一个新值时,Fault都会触发一个事件,但程序应该等待另一个&#34; WebsTakenInCare&#34;。 以下是代码:

            if (DataList.Count() == WebsTakenInCare)
            {
               FinalizedData = ShortenUpData(DataList);
               DataList.Clear();                
            }
            BuildCandles(FinalizedData);

并在更改后:

            if (DataList.Count() == WebsTakenInCare)
        {
            FinalizedData = ShortenUpData(DataList);
            DataList.Clear();
            BuildCandles(FinalizedData);
        }
        else
            return;

问候!

相关问题