与文件一起工作。 - 页 2 123456789 新评论 Дмитрий Александрович 2010.10.07 19:05 #11 mql5: MQL中的字符串是unicode(每个字符2个字节),kernel32.dll函数是ansi(每个字符1个字节)。使用一个字节数组和 函数StringToCharArray来调用ansish函数 怎么说呢? 我记得,Windows几乎完全是Unicode,而且已经有很长一段时间了......。还是kernel32.dll是个例外?-----Added------看了一下,真的是安西,很奇怪......。 Yedelkin 2011.05.28 17:36 #12 给外行的建议。我在处理文件方面的知识处于Word用户的水平。 专家顾问需要在文件中覆盖一个日期时间类型的值,每次都是在文件的开头,在整个工作时间内。读取最后写入的数值--只有在重新启动专家顾问的时候。我做了一个简单的结构,使用.csv文件--一切似乎都在工作。出现了以下问题。 1)为了尽量减少编写程序的时间,使用哪种文件类型来保存日期时间值比较好?根据我的理解,.csv文件是用字符串工作的,在有字符串的地方,处理这些字符串会有额外的时间消耗。 2) 如何正确使用FileClose(): 我应该在每次写完一个新值后关闭文件,还是在OnDeinit()函数中一次性关闭它?我想打开一次文件,然后只需向其中写入新的数值,而不必在多次打开和关闭文件上浪费时间。但这样做是否安全? 3) 我是否正确理解,如果某些值被写入文件,但文件没有关闭,那么在突然断电的情况下,这个写入的值不会消失,当程序被加载时,以后就可以读取它? [删除] 2011.05.28 18:21 #13 Yedelkin:出现了以下问题。 1)为了尽量减少写程序的时间,用什么文件类型来保存日期时间值比较好?根据我的理解,.csv文件是用字符串工作的,在有字符串的地方,处理这些字符串会有额外的时间消耗。 2) 如何正确使用FileClose():我应该在每次写完一个新值后关闭文件,还是在OnDeinit()函数中一次性关闭它? 我想打开一次文件,然后只需向其中写入新的数值,而不必在多次打开和关闭文件上浪费时间。但这样做是否安全? 3) 我是否正确理解,如果某些值被写入文件,但文件没有关闭,那么在突然断电的情况下,这个写入的值不会消失,当程序被加载时,以后就可以读取它?1.这取决于文件的保存格式。你可以把日期保存为数字、文本或日期时间 的专门类型。第二个问题是这样的:我们为什么要写到文件中,谁会查看它,如何查看?写入TXT将是最简单和最可靠的选择(你可以从任何程序,或几乎任何程序中读取它),CSV是一种更高级的写入文件 的方式。有优势,但也有明确的劣势。2.我更喜欢在OnInit或主类的构造函数中打开一次(取决于实现),在OnDeinit或析构函数中 关闭。但如果有必要重新打开/再打开文件(有很多原因导致这种行为),你可以定期进行(每小时/天/周一次)。如果文件很大或其中的信息难以恢复,最好是定期覆盖它或创建一个新的文件。3.如果数值被写入,但文件没有正确关闭(突然断电或软件挂起),很可能数据会丢失(部分或全部是一个单独的问题)。 我记得我曾在一个用Delphi编写的程序中试验过向纯txt写东西。在出现问题的情况下,最后的记录往往被打乱或丢失。 Vladimir Gomonov 2011.05.28 18:39 #14 如果有一个mql函数返回文件最后一次修改的时间,将是非常受欢迎的。datetime FileLastModificationTime(string FName); Yedelkin 2011.05.29 10:10 #15 MetaDriver: 如果有一个mql函数返回文件最后一次修改的时间,将是非常受欢迎的。datetime FileLastModificationTime(string FName); 总的来说--一个诗人的梦想! Yedelkin 2011.05.29 10:55 #16 Interesting: 1.日期可以保存为:数字、文本或特殊的日期时间 类型。 我找不到任何可以将日期保存为数据时间类型的 函数。如果只是通过数组。 出于某种原因,似乎在二进制文件中存储日期时间类型的值会更好(文件本身被设计成只能在重新加载时被同一个智能顾问读取)。我将尝试进行实验。 有趣的 是。 如果数值被写入,但文件没有正确关闭(突然断电或软件挂起),很可能数据会丢失(部分或完全是一个单独的问题)。 我记得我曾在一个用Delphi编写的程序中试验过写成纯txt。在出现问题的情况下,最后的记录往往被打乱或丢失。 这真是太糟糕了。事实证明,如果你想保证保存最后一个值,你必须一直使用FileClose() 函数:( Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime www.mql5.com Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5 --- 2011.05.29 11:14 #17 Yedelkin:这是个遗憾。事实证明,如果你想确保最后写入的值被保存,你必须一直使用FileClose():(FileFlush() 就是为此目的而发明的。 Yedelkin 2011.05.29 11:21 #18 sergeev: 耶德尔金。 这是个遗憾。事实证明,如果你想保证保存你写的最后一个值,你必须一直使用FileClose():( FileFlush()就是为此目的而发明的。 这可能是。但它并没有说如何使用它(何时使用它)。对于专业人员来说,这可能是一个简单的问题,但就我个人而言,在阅读了文档之后,我没有发现FileFlush()有任何特殊意义... 而FileClose()和FileFlush()之间 的区别仍然不清楚:/。 文件刷新 将文件I/O缓冲区中的所有剩余数据重置到磁盘。 ...在文件读取和文件写入操作之间必须调用FileFlush()。 那么,没有向文件写入,数据已经在某处 "刷入磁盘 "了? [删除] 2011.05.29 12:10 #19 Yedelkin: 有可能。但它没有说如何使用它(何时使用)。对于专业人员来说,这可能是一个简单的问题,但就我个人而言,在阅读了文档之后,我没有看到FileFlush()有任何特殊意义...... 而FileClose()和FileFlush()之间 的区别仍然不清楚:/。 那么,没有向文件写入数据,但数据已经被 "冲 "到某个地方了?下面是MQL4 参考资料中更详细的描述和例子空白文件冲 刷( int handle) 将文件I/O缓冲区中剩余的所有数据重置到磁盘。 注意:FileFlush()必须在文件读取和文件写入操作之间调用。 当一个文件被关闭时,数据会自动重置到磁盘上,所以在调用FileClose()之前不需要调用FileFlush()。 参数。 处理 - 由FileOpen()返回的文件描述符。 例子。int bars_count=Bars; int handle=FileOpen("mydat.csv",FILE_CSV|FILE_WRITE); if(handle>0) { FileWrite(handle, "#","OPEN","CLOSE","HIGH","LOW"); for(int i=0;i<bars_count;i++) FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]); FileFlush(handle); ... for(int i=0;i<bars_count;i++) FileWrite(handle, i+1,Open[i],Close[i],High[i], Low[i]); FileClose(handle); } 如果我理解正确的话,FileFlush调用,与FileClose不同,并不关闭文件,这允许继续使用它。而与重开相比,你应该得到一个明显的速度提升。虽然你需要一个更具体的例子来说明手头的任务。 FileFlush - Документация на MQL4 docs.mql4.com FileFlush - Документация на MQL4 Yedelkin 2011.05.29 12:22 #20 Interesting: 下面是MQL4 帮助中的一个更详细的描述和一个例子"关闭文件时,数据会自动重置到磁盘上,所以在调用FileClose()之前不需要调用FileFlush()" - 是的,是的,我开始明白sergeev 在说什么了。所以,事实证明,你可以调用FileFlush()来代替FileClose(),以保证将最后一条记录保存到文件中?而这将是一个合格的解决方案? 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
MQL中的字符串是unicode(每个字符2个字节),kernel32.dll函数是ansi(每个字符1个字节)。使用一个字节数组和 函数StringToCharArray来调用ansish函数
我记得,Windows几乎完全是Unicode,而且已经有很长一段时间了......。
还是kernel32.dll是个例外?
-----Added------
看了一下,真的是安西,很奇怪......。
给外行的建议。我在处理文件方面的知识处于Word用户的水平。
专家顾问需要在文件中覆盖一个日期时间类型的值,每次都是在文件的开头,在整个工作时间内。读取最后写入的数值--只有在重新启动专家顾问的时候。我做了一个简单的结构,使用.csv文件--一切似乎都在工作。出现了以下问题。
1)为了尽量减少编写程序的时间,使用哪种文件类型来保存日期时间值比较好?根据我的理解,.csv文件是用字符串工作的,在有字符串的地方,处理这些字符串会有额外的时间消耗。
2) 如何正确使用FileClose(): 我应该在每次写完一个新值后关闭文件,还是在OnDeinit()函数中一次性关闭它?我想打开一次文件,然后只需向其中写入新的数值,而不必在多次打开和关闭文件上浪费时间。但这样做是否安全?
3) 我是否正确理解,如果某些值被写入文件,但文件没有关闭,那么在突然断电的情况下,这个写入的值不会消失,当程序被加载时,以后就可以读取它?
Yedelkin:
出现了以下问题。
1)为了尽量减少写程序的时间,用什么文件类型来保存日期时间值比较好?根据我的理解,.csv文件是用字符串工作的,在有字符串的地方,处理这些字符串会有额外的时间消耗。
2) 如何正确使用FileClose():我应该在每次写完一个新值后关闭文件,还是在OnDeinit()函数中一次性关闭它? 我想打开一次文件,然后只需向其中写入新的数值,而不必在多次打开和关闭文件上浪费时间。但这样做是否安全?
3) 我是否正确理解,如果某些值被写入文件,但文件没有关闭,那么在突然断电的情况下,这个写入的值不会消失,当程序被加载时,以后就可以读取它?
1.这取决于文件的保存格式。你可以把日期保存为数字、文本或日期时间 的专门类型。
第二个问题是这样的:我们为什么要写到文件中,谁会查看它,如何查看?
写入TXT将是最简单和最可靠的选择(你可以从任何程序,或几乎任何程序中读取它),CSV是一种更高级的写入文件 的方式。有优势,但也有明确的劣势。
2.我更喜欢在OnInit或主类的构造函数中打开一次(取决于实现),在OnDeinit或析构函数中 关闭。
但如果有必要重新打开/再打开文件(有很多原因导致这种行为),你可以定期进行(每小时/天/周一次)。
如果文件很大或其中的信息难以恢复,最好是定期覆盖它或创建一个新的文件。
3.如果数值被写入,但文件没有正确关闭(突然断电或软件挂起),很可能数据会丢失(部分或全部是一个单独的问题)。
我记得我曾在一个用Delphi编写的程序中试验过向纯txt写东西。在出现问题的情况下,最后的记录往往被打乱或丢失。
如果有一个mql函数返回文件最后一次修改的时间,将是非常受欢迎的。
如果有一个mql函数返回文件最后一次修改的时间,将是非常受欢迎的。
1.日期可以保存为:数字、文本或特殊的日期时间 类型。
我找不到任何可以将日期保存为数据时间类型的 函数。如果只是通过数组。
出于某种原因,似乎在二进制文件中存储日期时间类型的值会更好(文件本身被设计成只能在重新加载时被同一个智能顾问读取)。我将尝试进行实验。
如果数值被写入,但文件没有正确关闭(突然断电或软件挂起),很可能数据会丢失(部分或完全是一个单独的问题)。
我记得我曾在一个用Delphi编写的程序中试验过写成纯txt。在出现问题的情况下,最后的记录往往被打乱或丢失。
这真是太糟糕了。事实证明,如果你想保证保存最后一个值,你必须一直使用FileClose() 函数:(
这是个遗憾。事实证明,如果你想确保最后写入的值被保存,你必须一直使用FileClose():(
sergeev:
这是个遗憾。事实证明,如果你想保证保存你写的最后一个值,你必须一直使用FileClose():(
FileFlush()就是为此目的而发明的。
这可能是。但它并没有说如何使用它(何时使用它)。对于专业人员来说,这可能是一个简单的问题,但就我个人而言,在阅读了文档之后,我没有发现FileFlush()有任何特殊意义...
而FileClose()和FileFlush()之间 的区别仍然不清楚:/。
将文件I/O缓冲区中的所有剩余数据重置到磁盘。
...在文件读取和文件写入操作之间必须调用FileFlush()。
那么,没有向文件写入,数据已经在某处 "刷入磁盘 "了?
有可能。但它没有说如何使用它(何时使用)。对于专业人员来说,这可能是一个简单的问题,但就我个人而言,在阅读了文档之后,我没有看到FileFlush()有任何特殊意义......
而FileClose()和FileFlush()之间 的区别仍然不清楚:/。
那么,没有向文件写入数据,但数据已经被 "冲 "到某个地方了?
下面是MQL4 参考资料中更详细的描述和例子
将文件I/O缓冲区中剩余的所有数据重置到磁盘。
注意:FileFlush()必须在文件读取和文件写入操作之间调用。当一个文件被关闭时,数据会自动重置到磁盘上,所以在调用FileClose()之前不需要调用FileFlush()。
例子。
如果我理解正确的话,FileFlush调用,与FileClose不同,并不关闭文件,这允许继续使用它。而与重开相比,你应该得到一个明显的速度提升。
虽然你需要一个更具体的例子来说明手头的任务。
下面是MQL4 帮助中的一个更详细的描述和一个例子