Kapatılmamış dosyalar içeriyorsa klasör silinmez - sayfa 4

 
Реter Konow :

Yani, bir senaryodan bir danışman yaptın ve onu çalıştırmayı denedin mi?

Neden tadilat? kontrol etmek için çok tembel, ancak FILE_SHARE_READ ve FILE_SHARE_WRITE işaretlerini denerseniz
 
A100 Ve her yere FILE_COMMON koymaya çalışın

STARIJ Neden yeniden? kontrol etmek için çok tembel, ancak FILE_SHARE_READ ve FILE_SHARE_WRITE işaretlerini denerseniz

Gerçek şu ki, bu bayrakların FolderClean() işleviyle ne ilgisi olduğu bilinmiyor. Bana göre kesinlikle hiçbiri.

Bunun bir dosya olmadığını kanıtlamak istiyorum. "notempty" klasöründeki "DeleteMe.txt" dosyası yerine, "DeleteMe Klasörü" klasörünü oluşturacak ve daha önce dosyayla yapmaya çalıştığım gibi bu klasörü silecek şekilde betiği yeniden yapacağım. Bakalım bir fark var mı?)

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Реter Konow :

Gerçek şu ki, bu bayrakların FolderClean() işleviyle ne ilgisi olduğu bilinmiyor. Bana göre kesinlikle hiçbiri.

klasör, içinde dosya yoksa silinebilir veya silinebilir. Bu bayraklar dosya erişimine izin verir

 
Реter Konow :

Yani, bir senaryodan danışman yaptın ve onu çalıştırmayı denedin mi?

Danışmanın ne yaptığını nerede söyledim?

 

Gerçekten de dosyayı kapatmanın işe yaradığını söylemeliyim. Görünüşe göre yanılmışım. İlk seferde çalışmadı, çünkü muhtemelen dönüştürülmüş komut dosyasının yeni sürümünü kaydetmedi ve açık kapatma etkili olmadı.

Şimdi bir dosya yerine klasörler oluşturmaya çalıştım. Sorunsuz yıkanıyorlar.

Sonra tekrar dosya oluşturmayı ekledim. Sonuç olarak: Dosyayı açıkça kapatmadan klasör, daha önce olduğu gibi komut dosyası tarafından silinmez. Dosyanın açık bir şekilde kapatılmasıyla tamamen silinir.

Elbette bu deneyim her şeyi açıklamıyor ve bazı şeyler belirsiz kalsa da bu sonuç ilham verici.

Test etmeye devam edeceğim ve sonuçları bildireceğim.

Belki hala sorunlar olacaktır ve şimdi kesin olarak söylemek zor.

 
Alexey Viktorov :

Danışmanın ne yaptığını nerede söyledim?

Üzgünüm, yanlış anladım.
 

İşte hem "DeleteMe.txt" dosyasını hem de "DeleteMe Klasörü"nü oluşturan komut dosyası kodu. Dosya, oluşturulduktan hemen sonra açıkça kapanır.

Her şey çalışıyor gibi görünüyor...

 //+------------------------------------------------------------------+ 
//|                                            Demo_FolderDelete.mq5 | 
//|                        Copyright 2011, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright 2011, MetaQuotes Software Corp." 
#property link        "https://www.mql5.com" 
#property version    "1.00" 
//--- описание 
#property description "Скрипт показывает пример использования FolderDelete()." 
#property description "Сначала создаются две папки, одна пустая, другая содержит файл." 
#property description "При попытке удаления непустой папки получим ошибку и предупреждение."
 
//--- покажем окно входных параметров при запуске скрипта 
#property script_show_inputs 
//--- входные параметры 
input string    firstFolder= "empty" ;     // пустая папка 
input string    secondFolder= "nonempty" ; // папка, в которой будет один файл 
string FolderName= "delete_me Folder" ;       // имя файла, который мы создадим в папке secondFolder 
string filename= "delete_me.txt" ;       // имя файла, который мы создадим в папке secondFolder 
//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart () 
  { 
//--- хендл файла запишем сюда 
   int handle; 
//--- выясним в какой папке мы работаем 
   string working_folder= TerminalInfoString ( TERMINAL_DATA_PATH )+ "\\MQL4\\Files" ; 
//--- отладочное сообщение    
   PrintFormat ( "working_folder=%s" ,working_folder); 
//--- попытка создать пустую папку относительно пути MQL4\Files 
   if ( FolderCreate (firstFolder, 0 )) // 0 означает, что работаем в локальной папке терминала 
     { 
       //--- выведем полный путь до созданной папки 
       PrintFormat ( "Cоздали папку %s" ,working_folder+ "\\" +firstFolder); 
       //--- сбросим код ошибки 
       ResetLastError (); 
     } 
   else 
       PrintFormat ( "Не удалось создать папку %s. Код ошибки %d" ,working_folder+ "\\" +firstFolder, GetLastError ());
 
//--- теперь создадим пустую папку с помощью функции FolderCreate 
   string filepath=secondFolder+ "\\" +FolderName;   // сформируем путь для файла, который хотим открыть на запись в несуществующей папке 

   if ( FolderCreate (filepath)) 
     { 
       FolderCreate (filepath + "1" );
       PrintFormat ( "Открыли папку %s" ,working_folder+ "\\" +filepath); 
     } 
   else 
       PrintFormat ( "Не удалось создать папку %s в папке %s. Код ошибки=" ,FolderName,secondFolder, GetLastError ());
 /**/
 //--- теперь создадим файл с помощью функции FileOpen() 
   string filepath_2=secondFolder+ "\\" +filename;   // сформируем путь для файла, который хотим открыть на запись в несуществующей папке 
   handle= FileOpen (filepath_2, FILE_WRITE | FILE_TXT ); // флаг FILE_WRITE в данном случае обязателен, см. справку к функции FileOpen 
   if (handle!= INVALID_HANDLE ) 
     {
//*************************************************************************     
   //---- Явно закрываем файл.   
       FileClose (handle);
//*************************************************************************           
       PrintFormat ( "Открыли файл на чтение %s" ,working_folder+ "\\" +filepath_2); 
     } 
   else 
       PrintFormat ( "Не удалось создать файл %s в папке %s. Код ошибки=" ,filename,secondFolder, GetLastError ());
 
 
   Comment ( StringFormat ( "Готовимся удалить папки %s и %s" , firstFolder, secondFolder)); 
//--- Небольшая пауза в 5 секунд, чтобы мы могли прочитать сообщение на графике 
   Sleep ( 5000 ); // Sleep() нельзя использовать в индикаторах!
 
//--- выведем диалоговое окно и просим пользователя 
   int choice= MessageBox ( StringFormat ( "Удалить папки %s и %s?" , firstFolder, secondFolder), 
                         "Удаление папок" , 
                         MB_YESNO | MB_ICONQUESTION ); //  будут две кнопки - "Yes" и "No"
 
//--- выполним действия в зависимости от выбранного варианта 
   if (choice== IDYES ) 
     { 
       //--- очистим комментарий на графике 
       Comment ( "" ); 
       //--- выведем сообщение в журнал "Эксперты" 
       PrintFormat ( "Пробуем удалить папки %s и %s" ,firstFolder, secondFolder); 
       ResetLastError (); 
       //--- удаляем пустую папку 
       if ( FolderDelete (firstFolder)) 
         //--- должны увидеть это сообщение, так как папка пустая 
         PrintFormat ( "Папка %s успешно удалена" ,firstFolder); 
       else 
         PrintFormat ( "Не удалось удалить папку %s. Код ошибки=%d" , firstFolder, GetLastError ());
 
       ResetLastError (); 

   //***********************************************************************************************************************   
       //--- сначала очищаем папку
       if ( FolderClean (secondFolder))
         PrintFormat ( "Папка %s успешно очищена" , secondFolder);
       else 
         //---  
         PrintFormat ( "Не удалось очистить папку %s. Код ошибки=%d" , secondFolder, GetLastError ());
   //***********************************************************************************************************************   
   
       ResetLastError (); 
        
       //--- удаляем папку, которая содержит файл               
       if ( FolderDelete (secondFolder)) 
         PrintFormat ( "Папка %s успешно удалена" , secondFolder); 
       else 
         //--- 
         PrintFormat ( "Не удалось удалить папку %s. Код ошибки=%d" , secondFolder, GetLastError ()); 
     }  

   else 
       Print ( "Удаление отменено" ); 
//--- 
  }


 
Реter Konow :

Elbette bu deneyim her şeyi açıklamıyor ve bazı şeyler belirsiz kalsa da bu sonuç ilham verici.

Test etmeye devam edeceğim ve sonuçları bildireceğim.

Belki hala sorunlar olacaktır ve şimdi kesin olarak söylemek zor.

Evet. tabiki yaz. Ve detayları kendinize saklayın, sadece "Yardımdaki örneği biraz değiştirdim, hiçbir şey" deyin.

Ve tahmin etmeye devam edeceğiz - sonuçta, herkes günlükleri tahmin edebilir. Ve çok daha ilginç.

 
Rashid Umarov :

Evet. tabiki yaz. Ve detayları kendinize saklayın, sadece "Yardımdaki örneği biraz değiştirdim, hiçbir şey" deyin.

Ve tahmin etmeye devam edeceğiz - sonuçta, herkes günlükleri tahmin edebilir. Ve çok daha ilginç.

Garip. Kişisel bir şey değil. Profesyonel değilsem, özür dilerim. Çalışacağım.

Yardım için teşekkürler.


PS, forumda asla yardım istemedi. Tecrübesizlik bu yüzden.

 

OOP ve prosedürel programlama iş parçacığında "Bütün hareketlerimi yazdım" ınızı hatırlıyorum . Bu başlıkta, sadece güvenilemeyeceğinizden emin oldum.

Kanıt ve detay yok - servis masasına yazmaya gerek yok.