如果一个文件夹包含未关闭的文件,则不删除该文件夹 - 页 5

 
Rashid Umarov:

我记得你在OOP与程序化编程 的主题中说 "我把所有的动作都写下来了" 。 在这个主题中,我只是相信你是不可信的

没有证据,没有细节--没有必要给服务台写信。


我的删除文件夹的问题仍然没有得到解决。脚本可以工作,但我还没有找到问题的原因。


有各种各样的可能性。这可能是也可能不是我的错。我随时准备提供解决问题所需的信息。


我对Servicedek的反馈绝不是抱怨。

 
Rashid Umarov:

我记得你在OOP与程序化编程 的主题中说 "我把所有的动作都写下来了" 。 在这个主题中,我只是确信你是不可信的

我不知道你在说什么动作,为什么你认为我不能被信任。我可能已经给出了一个理由,但我不记得具体的地点和时间。

无论如何,感谢你坦率地陈述你对我的态度。知道总比不知道好。

 

我希望你真的明白,你已经做了一个很好的有害建议--如何不给服务台写信

 
Rashid Umarov:

我希望你真的明白,你已经做了一个很好的有害的建议--如何不给服务台写信


唉,我没有得到它。我试图在我的信息中尽可能地清晰和具体。我提供了细节,给了一个GIF文件,注释了脚本的代码。那么我到底做错了什么?

 

你真的不能阅读帮助并正确修改代码吗?那么你怎么能要求一个不同的态度呢?下面是帮助中的代码,添加的内容用黄色标出

//+------------------------------------------------------------------+
//|                                                Test_FileOpen.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- неправильный способ открытия файла
   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string filename=terminal_data_path+"\\MQL5\\Files\\"+"fractals.csv";
   int filehandle=FileOpen(filename,FILE_WRITE|FILE_CSV);
   if(filehandle<0)
     {
      Print("Неудачная попытка открыть файл по абсолютному пути");
      Print("Код ошибки ",GetLastError());
     }
//--- правильный способ работы в "файловой песочнице"
   ResetLastError();
   filehandle=FileOpen("fractals.csv",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(_Period));
      FileClose(filehandle);
      Print("FileOpen OK");
     }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());

//--- еще один пример с созданием вложенной директории в MQL5\Files\
   string subfolder="Research";
   filehandle=FileOpen(subfolder+"\\fractals.txt",FILE_WRITE|FILE_CSV);
   if(filehandle!=INVALID_HANDLE)
     {
      FileWrite(filehandle,TimeCurrent(),Symbol(),EnumToString(_Period));
      FileClose(filehandle);
      Print("Файл должен быть создан в папке "+terminal_data_path+"\\"+subfolder);
     }
   else Print("Операция FileOpen неудачна, ошибка ",GetLastError());
//---
   Print("Очищаем папку \\MQL5\\",subfolder);
   FolderClean(subfolder,1);

   Print("Удаляем папку \\MQL5\\",subfolder);
   if(!FolderDelete(subfolder,1))
      PrintFormat("Ошибка! Не удалось удалить папку  \\MQL5\\",subfolder);
  }
//+------------------------------------------------------------------+
 
Rashid Umarov:

你真的不能阅读帮助并正确地修改代码吗?你怎么能要求一个不同的态度呢?以下是帮助中的代码,黄色部分为添加内容

如果对我这个人的态度取决于我是否在代码中犯了一个错误,那么我担心这里出了问题......)

我还是不大明白你的说法。

我已经在论坛上不止一次地发布了我修改过的代码。我唯一的错误是,在添加了明确的文件封闭后,我忘了重新保存脚本,因此没有看到它解决了我所修改的脚本中的问题。然而,在任何情况下,文档中都没有明确说你必须在创建后关闭文件。

过去,正如我之前所说,我的删除文件夹(注意不是文件)的问题仍然存在。这些文件夹中不再有文件,但FolderClean功能 会将它们删除。

原因尚不清楚。

所以,也许我去服务台毕竟是有原因的。

谢谢你花这么长的时间来考虑我的问题))。

 
Реter Konow:
谢谢。很高兴我不是唯一面临这个问题的人。我需要解决这个问题(没有它我就无法完成对文件导航器的使用)。我已经写信给Servicedeck。但我也在这里写,以备不时之需。结果是没有白费功夫)。
fxsaber:

我已经看到这种事情发生了很多次。我发现,在某些时候,Files文件夹以及所有子文件夹和文件都具有只读属性。手动取消选择这个标志并没有帮助。但重新启动终端总是有帮助的。无法让它播放(没有尝试),所以没有向SD报告。

加入。自2014年初以来,我有过以前极其罕见的崩溃,在9次试图在这个文件夹中创建一个文件时产生了操作系统 "32共享违反 "的错误,以16毫秒的速度连续进行。我搞不清楚哪里出了问题。我把它归咎于当时MQ中正在进行的 "文件处理功能的彻底升级"。也无法重现,只是巧合的是,刚才在20:12:42出现了这样的故障。随即,几秒钟过去了,进入该文件夹中的一个文件,设法正确地编辑它并保存它。未被发现的失败。

在这之前的5年里,崩溃每月发生一次或两次,从2014年2月开始,一定是每周都发生,我没数过多少次。尽管同时运行的终端数量从40-50个减少到35个。

 
Vladimir:

陪伴着。自2014年初以来,我有一个以前极其罕见的故障,在9次试图在这个文件夹中创建一个文件时产生了操作系统 "32共享违反 "的错误,以16毫秒的速度连续进行。我搞不清楚哪里出了问题。我把它归咎于当时MQ中正在进行的 "文件处理功能的彻底升级"。也无法重现,只是巧合地在20:12:42出现了这个故障。随即,几秒钟过去了,进入该文件夹中的一个文件,设法正确地编辑它并保存它。这个故障没有被抓住。

在此之前的5年里,这个错误每月出现一到两次,从2014年2月开始,每周都会出现,我数不清有多少次。尽管同时运行的终端数量从40-50个减少到35个。

我的所有文件都被删除了,甚至没有明确关闭它们。删掉了,因为我没有创建它们,而且它们以前在Files文件夹内。

问题是,为了擦除一个文件,我们需要它的手柄。然而,如果我们没有创建这个文件,而只是把它放在Files文件夹中,我们就不能得到它的句柄,因此我们就不能用FileClose() 关闭它。

同时,我们仍然可以复制或擦除它。然而,在此之后,无论是通过编程还是手动,都不能删除该文件夹。只有在重启终端后才能手动操作。

我以后会试着更清楚地再现这个问题,并举出说明性的例子。

 
Реter Konow:

我得到的所有文件都被清除了,即使没有明确关闭它们。删掉了,因为我没有创建它们,而且它们以前在Files文件夹内。

问题是,为了删除一个文件,我们需要它的手柄。但是,如果我们没有创建这个文件,而只是把它放到了Files文件夹中,我们就不能得到它的句柄,因此我们就不能用FileClose() 关闭它。

同时,我们仍然可以复制或擦除它。然而,在此之后,无论是通过编程还是手动,都不能删除该文件夹。只有在重启终端后才能手动操作。

我以后会试着用清晰的例子更清楚地再现这个问题。

这可能是问题的关键所在。

在自定义文件导航器中重命名一个文件夹时,我不能使用FolderRename(),因为它不存在。

相反,我把所有的文件和文件夹复制到一个新的文件夹,用一个自定义的名字,并从原来的文件夹(我重新命名)中删除原来的原始文件和文件夹。结果,我首先删除了原文件夹中的所有文件(在将它们复制到新文件夹后),然后使用FolderClean()试图删除原文件夹中剩余的文件夹层次结构,该文件夹已经是空的。这就是错误发生的地方。一些文件夹被删除,但有一两个文件夹仍然存在,就像源文件夹一样。 之后我试着手动擦除它,结果失败了。只有重新启动终端才有帮助。

 
Реter Konow:

这可能是问题的关键所在。

在自定义文件导航器中重命名一个文件夹时,我不能使用FolderRename(),因为它不存在。

相反,我把所有的文件和文件夹复制到一个新的文件夹,用一个自定义的名字,并从原来的文件夹(我重新命名)中删除原来的原始文件和文件夹。结果,我首先删除了原文件夹中的所有文件(在将它们复制到新文件夹中后),然后使用FolderClean()试图删除原文件夹中剩余的文件夹层次结构,而该文件夹已经是空的了。这就是错误发生的地方。一些文件夹被删除,但有一两个文件夹仍然存在,就像源文件夹一样。 之后我试着手动擦除它,结果失败了。只有重新启动终端才有帮助。


请继续--只要你在 "小说 "这一迷人的体裁中写作。希望到了第40页左右,你会转到 "技术文献 "这一类。