请问老师: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
但实际未删除文件的问题,可能与平台的特定机制或文件锁定策略有关。以下是针对开拓者平台的解决方案:
在调用 FileDelete
前,清空读取的数据并重置变量,以触发开拓者内部资源释放:
cpp
复制
ArrayClear(rvalue); // 清空数组,可能帮助释放文件句柄
ret = FileDelete(filePath);
开拓者可能异步处理文件操作,添加短暂延迟确保删除完成:
cpp
复制
ret = ReadCSVFile(filePath, rvalue);
Sleep(1000); // 等待1秒(单位:毫秒)
ret = FileDelete(filePath);
绕过平台 API,直接调用操作系统命令(适用于 Windows):
cpp
复制
// 替换 FileDelete 为系统命令
ret = System("cmd /c del /F /Q " + filePath);
Print("强制删除结果: " + IIFString(ret == 0, "成功", "失败"));
使用开拓者的 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, "是", "否"));
}
通过上述方法,应能有效定位并解决 FileDelete
失效问题。若仍有异常,建议提供开拓者版本号和操作系统环境以进一步分析。
谢谢,等待回复。
s收到了转发给研发人员看看
请问有结果了吗?
只是因为文件没有释放,所以无法删除