FileDelete是否失效?

请问老师:FileDelete无法删除文件,但函数执行后返回”true“。是否该函数已失效?测试码:Events OnInit() { String filePath = D:\\\\abc.csv; Array<Array<String>> rvalue; Bool ret = ReadCSVFile(filePath, rvalue); Print(ReadCSVFile: + IIFString(ret, True, False) + , + TextArray(rvalue)); ret = FileDelete(filePath); Print(FileDelete: + IIFString(ret, True, False)); ArrayClear(rvalue); ret = ReadCSVFile(filePath, rvalue); Print(ReadCSVFile: + IIFString(ret, True, False) + , + TextArray(rvalue)); }第三个print不应该有输出。

在 开拓者量化平台(TradeBlazer) 中,FileDelete 函数返回 true 但实际未删除文件的问题,可能与平台的特定机制或文件锁定策略有关。以下是针对开拓者平台的解决方案:关键问题定位文件句柄未释放开拓者的 ReadCSVFile 函数可能在读取文件后未立即释放文件句柄,导致 FileDelete 删除时文件仍被占用。平台特性:开拓者的文件操作可能存在延迟释放机制,返回 true 仅表示操作请求已接受,而非实际完成。路径权限问题若文件路径位于系统盘(如 D:\ 根目录),程序可能因权限不足导致静默失败。针对性解决方案1. 强制释放文件句柄在调用 FileDelete 前,清空读取的数据并重置变量,以触发开拓者内部资源释放:cpp复制ArrayClear(rvalue); // 清空数组,可能帮助释放文件句柄 ret = FileDelete(filePath);2. 添加延迟等待开拓者可能异步处理文件操作,添加短暂延迟确保删除完成:cpp复制ret = ReadCSVFile(filePath, rvalue); Sleep(1000); // 等待1秒(单位:毫秒) ret = FileDelete(filePath);3. 使用系统命令强制删除绕过平台 API,直接调用操作系统命令(适用于 Windows):cpp复制// 替换 FileDelete 为系统命令 ret = System("cmd /c del /F /Q " + filePath); Print("强制删除结果: " + IIFString(ret == 0, "成功", "失败"));注意:路径中若含空格需用引号包裹,如 "D:\\test file.csv"。4. 验证文件是否存在使用开拓者的 FileExists 函数(如有)或系统命令检查文件状态:cpp复制Bool exists = FileExists(filePath); Print("删除后文件是否存在: " + IIFString(exists, "是", "否"));修正后的参考代码cpp复制Events OnInit() { String filePath = "D:/abc.csv"; // 使用正斜杠避免转义问题 Array<Array<String>> rvalue; // 第一次读取文件 Bool ret = ReadCSVFile(filePath, rvalue); Print("首次读取结果: " + IIFString(ret, "成功", "失败")); // 释放资源并尝试删除 ArrayClear(rvalue); // 清空数据触发句柄释放 Sleep(500); // 等待500毫秒 ret = FileDelete(filePath); Print("删除操作结果: " + IIFString(ret, "报告成功", "报告失败")); // 通过系统命令强制删除(备用方案) if (FileExists(filePath)) { ret = System("cmd /c del /F /Q \"" + filePath + "\""); // 处理含空格路径 Print("系统命令删除结果: " + IIFString(ret == 0, "成功", "失败")); } // 二次验证 Bool exists = FileExists(filePath); Print("最终文件是否存在: " + IIFString(exists, "是", "否")); }开拓者平台注意事项权限问题确保开拓者以管理员权限运行(右键快捷方式选择“以管理员身份运行”)。避免操作系统保护目录(如 Program Files)。路径规范推荐使用 D:/data/file.csv 格式,避免反斜杠转义问题。平台兼容性若使用 System 执行命令,需在代码开头添加编译标记:cpp复制#COMMENT IgnoreCheckedSystemCall进一步排查查看平台日志开拓者安装目录下的日志文件(如 Log 文件夹)可能包含更详细的错误信息。联系技术支持若问题持续存在,可能是平台内部机制导致,需提交问题至开拓者官方支持。通过上述方法,应能有效定位并解决 FileDelete 失效问题。若仍有异常,建议提供开拓者版本号和操作系统环境以进一步分析。

回复:感谢答复!另外,Sleep是tbq3专有函数吗?在tbq中提示该函数没有被声明。有办法在tbq中实现“Sleep(1000); // 等待1秒(单位:毫秒)”的功能?

回复:他是用ai直接生成的代码

回复:😄这样啊,ai这么长的回复确实认真看了一下。发现这个sleep有点意思😄。在公式运行过程中,某点上能延迟一会儿执行,靠一个函数能实现的确很诱惑。tbq有这样的方法吗?管理员老师可以指点个方向吗

回复:目前没有直接的sleep函数可供试用

回复:以前其他帖子回复中给过代码

谢谢,等待回复。

s收到了转发给研发人员看看

回复:请问有结果了吗?

回复:只是因为文件没有释放,所以无法删除