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

 
Rashid Umarov :

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 yazmanıza gerek yok.


Klasörleri silme sorunum hala çözülmedi. Komut dosyası çalışıyor, ancak sorunumun nedenini henüz bulamadım.


Çeşitli seçenekler mümkündür. Bu benim hatam olabilir veya olmayabilir. Sorunu çözmek için her zaman gerekli bilgileri sağlamaya hazırdır.


Servis masasına yaptığım itiraz hiçbir şekilde bir şikayet değildir.

 
Rashid Umarov :

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

Hangi hareketlerden bahsettiğini ve neden bana güvenilmeyeceğini düşündüğünü anlamıyorum. Belki bunun için bir sebep verdim, ama tam olarak nerede ve ne zaman olduğunu hatırlamıyorum.

Her halükarda, bana karşı tavrınız konusunda açık sözlü olduğunuz için teşekkür ederim. Bilmemek, bilmemekten daha iyidir.

 

Umarım gerçekten anlarsın. Harika bir iş çıkardınız Kötü tavsiye - Servis Masasına nasıl yazılmaz

 
Rashid Umarov :

Umarım gerçekten anlarsın. Harika bir iş çıkardınız Kötü tavsiye - Servis Masasına nasıl yazılmaz


Malesef anlamadım. İtirazımda mümkün olduğunca açık ve net olmaya çalıştım. Ayrıntıları bildirdi, bir gif dosyası getirdi, yorumlarla birlikte komut dosyası kodu. Peki tam olarak neyi yanlış yaptım?

 

Yardımı gerçekten okuyup kodu doğru bir şekilde değiştiremiyor musunuz? O halde nasıl farklı bir tavır talep edebilirsiniz? İşte yardımdan gelen kod, katkı maddeleri sarı renkle vurgulanmıştır

 //+------------------------------------------------------------------+
//|                                                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 :

Yardımı gerçekten okuyup kodu doğru bir şekilde değiştiremiyor musunuz? O zaman nasıl farklı bir tavır talep edebilirsiniz? İşte yardımdan gelen kod, katkı maddeleri sarı renkle vurgulanmıştır

Kişime karşı tutum, kodda bir hata yapıp yapmadığıma bağlıysa, korkarım ki burada bir şey doğru değil ...)))

Hala iddialarınızı gerçekten anlamıyorum.

Değiştirdiğim kodu defalarca forumda yayınladım. Tek hatam, açık bir dosyayı kapattıktan sonra, komut dosyasını yeniden kaydetmeyi unuttum ve bu nedenle, değiştirilmiş komut dosyamda sorunu çözdüğünü görmedim. Ancak, her durumda, belgeler, dosyaların oluşturulduktan sonra kapatılması gerektiğini açıkça söylemez.

Bunun yanı sıra, dediğim gibi, klasörleri silme sorunum (dosyaları değil) hala devam etti. Klasörlerde başka dosya yok, ancak bunlar FolderClean işlevi tarafından silindiğinde bir hata oluşuyor.

Nedeni henüz belli değil.

Bu yüzden servis masasına bir sebepten dolayı başvurmuş olabilirim.

Sorunuma bakmak için bu kadar uzun zaman ayırdığınız için teşekkür ederim.

 
Реter Konow :
Teşekkür ederim. Bu sorunu yaşayan tek ben olmadığıma sevindim. Bu sorunu çözmek için "burnum kanadı" (bu olmadan kullanıcı dosyası gezginini tamamlayamam). Servis masasına yazdım. Ama her ihtimale karşı buraya yazıyorum. Boşuna olmadığı ortaya çıktı.)
fxsaber :

Bu tür şeyleri birçok kez gördüm. Bir noktada, tüm alt klasörleri ve dosyaları içeren Dosyalar klasörünün salt okunur özniteliği aldığını öğrendim. Bu bayrağı elle kaldırmak yardımcı olmuyor. Ancak terminali yeniden başlatmak her zaman yardımcı olur. Oynatmayı başaramadım (denemedim), bu yüzden SD'ye bildirmedim.

Katılıyorum. 2014'ün başından itibaren, bu klasörde bir dosya oluşturmaya yönelik 9 denemede, 16 milisaniyelik bir adımla art arda giden bir işletim sistemi hatası "32 Paylaşım ihlali" oluşturan son derece nadir çökmeler yaşamaya başladım. Neler olduğunu anlayamadım. O sırada MQ'da gerçekleşen "dosyalarla çalışma işlevlerinin radikal bir şekilde güncellenmesi" konusunda günah işlendi. Ben de çoğaltamıyorum, ama tesadüfen şimdi, 20:12:42'de böyle bir arıza meydana geldi. Hemen, birkaç saniye geçti, bu klasördeki dosyaya girdim, doğru bir şekilde düzenleyip kaydetmeyi başardım. Başarısızlık yakalanmaz.

Ondan önce, 5 yıl boyunca ayda bir veya iki kez bu arıza ortaya çıktı, Şubat 2014'ten beri her hafta zorunlu oldu, kaç kez saymadım. Eşzamanlı olarak başlatılan terminallerin sayısı 40-50'den 35'e düştü.

 
Vladimir :

Katılıyorum. 2014'ün başından itibaren, bu klasörde bir dosya oluşturmaya yönelik 9 denemede, 16 milisaniyelik bir adımla art arda giden bir işletim sistemi hatası "32 Paylaşım ihlali" oluşturan son derece nadir çökmeler yaşamaya başladım. Neler olduğunu anlayamadım. O sırada MQ'da gerçekleşen "dosyalarla çalışma işlevlerinin radikal bir şekilde güncellenmesi" konusunda günah işlendi. Ben de çoğaltamıyorum ama tesadüfen şimdi, 20:12:42'de böyle bir arıza meydana geldi. Hemen, birkaç saniye geçti, bu klasördeki dosyaya girdim, doğru bir şekilde düzenleyip kaydetmeyi başardım. Başarısızlık yakalanmaz.

Ondan önce, 5 yıl boyunca ayda bir veya iki kez bu arıza ortaya çıktı, Şubat 2014'ten beri her hafta zorunlu oldu, kaç kez saymadım. Eşzamanlı olarak başlatılan terminallerin sayısı 40-50'den 35'e düştü.

Bana göre tüm dosyalar, açık bir şekilde kapatılmadan bile silinir. Silindiler çünkü onları ben yaratmadım ve ondan önce Dosyalar klasöründeydiler.

Gerçek şu ki, bir dosyayı silmek için onun tanıtıcısına ihtiyacınız var. Ancak, bu dosyayı biz yaratmadıysak, sadece Files klasörüne yerleştirdiysek, Handle'ını alamıyoruz ve bu nedenle onu FileClose() işleviyle kapatamayız.

Aynı zamanda, yine de kopyalayabilir veya silebiliriz. Ancak bundan sonraki klasör, programlı veya manuel olarak silinemez. Yalnızca terminali yeniden başlattıktan sonra manuel olarak.

Daha sonra açıklayıcı örneklerle sorunu daha açık bir şekilde yeniden oluşturmaya çalışacağım.

 
Реter Konow :

Bana göre tüm dosyalar, açık bir şekilde kapatılmadan bile silinir. Silindiler çünkü onları ben yaratmadım ve ondan önce Dosyalar klasöründeydiler.

Gerçek şu ki, bir dosyayı silmek için tutamacına ihtiyacınız var. Ancak, bu dosyayı biz yaratmadıysak, sadece Files klasörüne yerleştirdiysek, Handle'ını alamıyoruz ve bu nedenle onu FileClose() işleviyle kapatamayız.

Aynı zamanda, yine de kopyalayabilir veya silebiliriz. Ancak bundan sonraki klasör, programlı veya manuel olarak silinemez. Yalnızca terminali yeniden başlattıktan sonra manuel olarak.

Daha sonra açıklayıcı örneklerle sorunu daha açık bir şekilde yeniden oluşturmaya çalışacağım.

Belki de sorunun püf noktası budur.

Kullanıcının dosya gezgininde bir klasörü yeniden adlandırırken, mevcut olmadığı için FolderRename() işlevini kullanamıyorum.

Bunun yerine, tüm dosya ve klasörleri özel bir adla yeni bir klasöre kopyalarım ve orijinal dosya ve klasörleri orijinal klasörden (yeniden adlandırdığım) silerim. Sonuç olarak, önce orijinal klasördeki tüm dosyaları siliyorum (yeni klasöre kopyaladıktan sonra) ve ardından FolderClean() işlevi ile orijinal klasörde zaten boş olan kalan klasör hiyerarşisini silmeye çalışıyorum. Hatanın oluştuğu yer burasıdır. Bazı klasörler silinir, ancak orijinal klasör gibi bir veya iki tanesi kalır. El ile silmeyi denedikten sonra başarısız oluyor. Yalnızca terminali yeniden başlatmak yardımcı olur.

 
Реter Konow :

Belki de sorunun püf noktası bu.

Kullanıcının dosya gezgininde bir klasörü yeniden adlandırırken, mevcut olmadığı için FolderRename() işlevini kullanamıyorum.

Bunun yerine, tüm dosya ve klasörleri özel bir adla yeni bir klasöre kopyalarım ve orijinal dosya ve klasörleri orijinal klasörden (yeniden adlandırdığım) silerim. Sonuç olarak, önce orijinal klasördeki tüm dosyaları siliyorum (yeni klasöre kopyaladıktan sonra) ve bu nedenle FolderClean() işlevi ile orijinal klasörde zaten boş olan kalan klasör hiyerarşisini silmeye çalışıyorum. Hatanın oluştuğu yer burasıdır. Bazı klasörler silinir, ancak orijinal klasör gibi bir veya iki tanesi kalır. El ile silmeyi denedikten sonra başarısız oluyor. Yalnızca terminali yeniden başlatmak yardımcı olur.


Lütfen devam edin - heyecan verici "kurgu" türünde yazdığınız sürece. Umarım 40. sayfada "teknik edebiyat" türüne geçersiniz.