在Windows资源管理器中删除文件后,我的System.IO.File.WriteAllText编码不会创建文件

时间:2013-04-18 16:23:02

标签: c# .net

结论在帖子的底部

我是C#的新手并且刚开始使用System.IO,但一直无法找到有关我的问题的信息,所以想问问这里的人:

我有一个程序,在运行时创建一个目录,然后将.txt文件写入某个变量的最新值,这样如果程序中断或计算机断电,重新启动程序将从.txt文件中检索存储的号码。

我只是这样做了:

    string INSTATR = LastValue.ToString();
    System.IO.File.WriteAllText(@"C:\\DotTempFiles\\"+Instrument.Name+"ATR.txt", INSTATR);

我第一次运行这个程序时,文件已经创建,我发现在每个循环中,文件中的数字都被覆盖到我想要的最后一个有效数字。

但是,一旦我进入DotTempFiles目录并使用Shift + Del删除了.txt文件,该文件在运行程序时从未返回,就像我想的那样。如果我删除整个目录并运行程序,则会重新创建该目录,但仍不是该文件。

如果我使用不同的Instrument.Name运行该程序,则会按预期创建该新文件,但即使在计算机重新启动后,我手动删除的原始文件仍未显示。

我在网上找不到任何信息线索,所以有人有想法吗?谢谢!

编辑(更多信息):人们问了几个问题所以我正在添加更多信息(谢谢)

没有报告错误。它编译得很好,在运行时,有一个输出窗口,通常会提醒我错误,比如我引用一个空的对象,或者尝试从空文件中读取,等等。没有这样的错误发生。

有关该计划的更多背景知识。有一个名为NinjaTrader的股票交易程序,它有自己的基于C#的API。他们不会支持我的问题,因为它超出了他们打算让人们使用的脚本开发的正常范围,这对我来说没问题。该程序本身是一个在NinjaTrader中运行的交易策略,它暴露了默认程序员对这两种主要方法的访问:

初​​始化()

protected override void OnBarUpdate()//这是程序的主要部分,每次在股票图表上的某个柱子发生变化时都会调用该部分。

在变量声明部分,我有:

    System.IO.DirectoryInfo di = Directory.CreateDirectory(@"C:\\DotTempFiles");

在OnStartUp()中我有这个:

    //Set up ReadMe file in the temp directory in case people wonder why it keeps appearing
    string README = "This DotTempFiles directory is created by the strategy every time it is run, and temporary text files with the name [instrumentsymbol]ATR.txt are written into it containing the last highest ATRStopValue for the strategy, which if it is stopped and restarted with an open position, it will read from that file to get back the best value instead of recalculating it with possibility of a lower unwanted value.";
    System.IO.File.WriteAllText(@"C:\\DotTempFiles\\README.txt", README);

每次调用OnBarUpdate()时,每秒最多可以调试几次,它首先计算一个名为LastValue的double,它是一个与股票价格相关的数字,然后将其转换为字符串INSTATR,然后写入它到.txt文件。

    string INSTATR = LastValue.ToString();
    System.IO.File.WriteAllText(@"C:\\DotTempFiles\\"+Instrument.Name+"ATR.txt", INSTATR);

这是我连接到这个问题的每一段代码。正如我上面提到的,它是第一次创建文件,但由于我在Windows资源管理器中删除了该文件,因此无法重新创建它。但是,删除目录并重新启动策略程序会重新创建该目录。

OnTermination()不会以任何方式用于关闭或删除文件(以防万一人们想问) - 我没有使用任何其他代码与文件交互而不是已经显示的文件。谢谢!

编辑2(阅读评论后更新):谢谢大家的意见和帮助。当我回到家时,我会做的是尝试使用包含这些代码行的空程序重新创建最小版本,并查看结果是什么,并且我将以任一方式发布更新。

编辑3 :谢谢史蒂夫,从现在开始我应该使用这个类型的东西。

编辑4(结论):好吧,我发现我忽略了一些关于我自己的代码逻辑的简单方法。我设置File.WriteAllText以在Double变量值增加时触发,而不是每次调用OnBarUpdate方法时触发。因此,除了每隔几个小时左右,文件才会被写入,现在我看到一切正常。对不起,我让所有这些人都阅读了这篇文章,因为这是基于我自己的错误的另一个问题。但是,我非常感谢大家的评论,这些评论帮助我达到了这一点,感谢史蒂夫和马克拉卡塔提供的一些建议,我从中学到了一些新的好东西。

1 个答案:

答案 0 :(得分:0)

我发现文件创建没有任何问题,我的编码逻辑只是调用它的频率远远低于我的假设(每隔几小时一次,每秒几次)