Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# My System.IO.File.writealText编码不';在Windows资源管理器中删除文件后,不要创建该文件_C#_.net - Fatal编程技术网

C# My System.IO.File.writealText编码不';在Windows资源管理器中删除文件后,不要创建该文件

C# My System.IO.File.writealText编码不';在Windows资源管理器中删除文件后,不要创建该文件,c#,.net,C#,.net,帖子底部的结论 我是C#的新手,刚刚开始使用System.IO,但还没有找到关于我的问题的信息,所以想问这里的人: 我有一个程序,在运行时,创建一个目录,然后将某个变量的最新值写入.txt文件,这样,如果程序中断或计算机断电,重新启动程序将从.txt文件中检索存储的数字 string INSTATR = LastValue.ToString(); System.IO.File.WriteAllText(@"C:\\DotTempFiles\\"+Instrument.Name+"

帖子底部的结论

我是C#的新手,刚刚开始使用System.IO,但还没有找到关于我的问题的信息,所以想问这里的人:

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

    string INSTATR = LastValue.ToString();
    System.IO.File.WriteAllText(@"C:\\DotTempFiles\\"+Instrument.Name+"ATR.txt", INSTATR);
我只是这样做了:

    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");
    //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);
在OnStartUp()中,我有:

    System.IO.DirectoryInfo di = Directory.CreateDirectory(@"C:\\DotTempFiles");
    //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的双精度值,这是一个与股价相关的数字,然后将其转换为字符串INSTATR,然后将其写入.txt文件

    string INSTATR = LastValue.ToString();
    System.IO.File.WriteAllText(@"C:\\DotTempFiles\\"+Instrument.Name+"ATR.txt", INSTATR);
这是我与这个问题相关的每一段代码。正如我上面提到的,它第一次创建了这个文件,但是由于我在windows资源管理器中删除了这个文件,它无法重新创建它。但是,删除目录并重新启动策略程序会重新创建该目录

OnTermination()不用于以任何方式关闭或删除文件(以防有人询问)--除了已经显示的代码之外,我没有使用任何其他代码与文件交互。谢谢

编辑2(阅读评论后更新):感谢大家的评论和帮助。回到家后,我要做的是尝试用一个只包含这些代码行的空程序重新创建这个程序的最低版本,看看结果如何,然后我会以任何一种方式发布更新

编辑3:谢谢你,史蒂夫,这是一个非常好的主意,从现在起我应该用它来处理这类事情


编辑4(结论):嗯,我发现我忽略了一些关于我自己代码逻辑的简单内容。我将File.WriteAllText设置为每当双变量的值增加时触发,而不是每次调用OnBarUpdate方法时触发。因此,除非每隔几个小时左右写一次,否则不会写入该文件。现在,我看到一切都正常工作。我很抱歉,我让所有这些人读了这篇文章,因为它是基于另一个问题,我自己的过错。然而,我非常感谢大家的评论帮助我达到了这一点,也感谢Steve和Mark Lakata的提示,让我从中学到了一些新的好东西。

我发现文件创建没有什么问题,事实是我的编码逻辑要求它的频率比我想象的要低得多(几小时一次与每秒几次)

您是否遇到任何类型的错误?您是否尝试过编写错误的最小副本?例如,在一个新的C#程序中仅写上面两行。您没有发布足够的代码,我们无法帮助您解决此问题。请发布所有相关代码。您的程序肯定有其他问题,因为
File.writealTextSHIFT
+
DEL
文件时,code>会按预期工作。虽然这不是问题的解决方案,但我建议您使用其他位置来存储文件。请使用类似于
System.Environment.GetFolder(System.Environment.SpecialFolders.AppData)的方法
,并在该目录下创建一个与您的程序同名的目录。您的文件名有点不稳定,因为您误用了
@“
结构。请使用
@“C:\DotTempFiles\ATR.txt”
“C:\\DotTempFiles\\ATR.txt”