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

 

Yarın, bu sorunu tamamen yeniden üreten bir komut dosyası oluşturmaya çalışacağım.

İnsanlar burada "kurgu" yaptığımı söylemesinler.)

Çözümde yardım etmeye ve yardım etmeye istekli oldukları için herkese BÜYÜK bir teşekkür ederiz. ))

 

Böyle bir kayan hata oluştu (sıra açıklanmış ve kitaplık .ex5 dosyası eklenmiştir). Bunu belgelemek zor.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

A100 , 2016.08.04 00:05

Uzman tarafından dosya açılırken hata oluştu. Ve eğer örneğin

1. "bazı alakasız kodları" kaldırın (aşağıya bakın)

2. veya ::Sleep(1000) öğesini kaldırın

o zaman hata oluşmaz

 //Test.mq5
#import "Test001.ex5"
         string f( string file );
#import
string __Period() { return StringSubstr ( EnumToString (( ENUM_TIMEFRAMES ) Period ()), 7 ); }
void OnInit ()
{
         Print ( Symbol (), "," , __Period(), ", результат=" , f( "test.txt" ));
}

sıralama:

1. Yeni bir profil oluşturun (örneğin "Test")

2. Test.ex5 uzmanını her iki çizelgeye ekleyerek iki yeni çizelge açın (şekle bakın)

4. Mevcut başka bir profili seçin

5. "Test" profilini seçin

sonuç:

Test001.mq5 şöyle görünürken:

 //Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        :: ResetLastError ();
         int hFile = :: FileOpen ( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
         if ( hFile == INVALID_HANDLE )
                 return :: StringFormat ( "Error(%d): Не был открыт файл: %s" , :: GetLastError (), file );
        :: Sleep ( 1000 );
        :: FileClose ( hFile );
         return "OK" ;
}

Şimdi oraya eklenmiş kütüphane dosyası ile denedim: sonuç aynı (test dosyası her iki uzman tarafından ayrı ayrı açılır ve eğer aynı anda ise uzmanlardan biri bir hata bildirir)
2017.08.28 23:40:43.623 Testi (EURUSD,M15) EURUSD,M15, sonuç=Tamam
2017.08.28 23:40:52.389 Testi (GBPUSD,M15) GBPUSD,M15, sonuç=Tamam

2017.08.28 23:41:14.387 Test (GBPUSD,M15) GBPUSD,M15, sonuç=Hata(5004): Dosya açılmadı: test.txt
2017.08.28 23:41:15.484 Test (EURUSD,M15) EURUSD,M15, sonuç=Tamam


 

Uygulamayı # 1530548 numarası altında buldum, ancak yorum yapmadan - zaten düzeltilmiş olabilir. Değilse, lütfen tekrar gözden geçirin.

 

Реter Konow :

Dosya, başka bir klasörün üzerine yazılmak üzere uygulamam (dosya gezgini) tarafından açılır .

Okumak için bir dosya açarken dosya tanıtıcısını alırız .

Peter Konow'un fotoğrafı.

Üzerine yazdıktan sonra dosyayı kapatmam gerekiyor ama yapamıyorum (işlem yok) ve dosyayı silemiyorum.

Başka bir dosyaya yazmak için başka bir dosyanın tanıtıcısına ihtiyacınız vardır, bu nedenle onu başka bir değişkende saklamanız önerilir. Yeni bir dosyaya yazıldıktan sonra, iki dosyanın tutamaçları iki değişkende saklanır, her iki dosya da bu tutamaçlar kullanılarak kapatılır.

Peter Konow'un fotoğrafı.

Tutamaç yok, çünkü dosya ne zaman ve kim tarafından oluşturulduğunu kimse bilmiyor.

Dosya ne zaman ve kim tarafından bilinmiyorsa, bu dosyanın herhangi bir uygulama tarafından işgal edilmemesi ÇOK yüksek bir olasılıktır. Bu dosyayı herhangi bir amaçla açarsanız, FileOpen işlevi tarafından alınan bir tanıtıcınız zaten vardır ve buna göre klasörü temizlemeden önce onu kapatmanız gerekir.

Peter Konow'un fotoğrafı.

Bu durumda dosya, Dosyalar klasörünün içinde bulunur ve başka bir klasöre kopyalanabilir ve ardından silinebilir.

Mevcut bir mql programından dosya kopyalarken, dosya tanıtıcısına kesinlikle ihtiyaç yoktur.

Peter Konow'un fotoğrafı.

Ancak kopyaladıktan sonra bu dosyayı kapatamazsınız. Kol yok.

Bir dosyayı kopyaladıktan sonra bu dosya açılmaz ve kapatmaya gerek yoktur.

Peter Konow'un fotoğrafı.

Bu muhtemelen, silinen dosyalarla FolderClean() klasörlerinin daha fazla silinmesinin çalışmamasının nedenidir.

Mutlak yanılsama.

Peter Konow'un fotoğrafı.

Soru: Bir MQL programında bu dosyanın tanıtıcısı nasıl alınır?

Yukarıdan, bu soru mantıklı değil. Dosya tanıtıcısı, yalnızca FileTell ve FileSeek dosya işaretçisinin nerede okunacağını veya nereye yazılacağını belirlemek\atamak, verileri FileFlush diskine boşaltılmaya zorlamak ve tabii ki kapatmak için dosya açılırken elde edilir. diğer uygulamaların onunla çalışabilmesi için dosyayı serbest bırakmak için.


Şans eseri, probleminizin ne olduğunu keşfettim:

Deneme sırasında, dosyanın oluşturulmasını ve silinmesini izlemek için Explorer'da veya başka bir dosya yöneticisinde bir klasör açılır. Ve dosyayı sildikten sonra klasör meşgul kalır ve silinemez. Sonuç olarak, alıyoruz

 2017.08 . 29 09 : 42 : 15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки= 5024

Ancak, bir klasörü silmek için başarısız bir girişimden sonra, bu klasörün ne yazık ki meşgul kalması bir gerçektir. Şimdi bununla ilgili SD'ye bir uygulama oluşturulacak.

not; Ne yazık ki, deney sırasında ben de berbattım. Dosyaya yazdıktan sonra verileri diske attım, not defteri ile açmaya çalıştım ama yanıt geldi... (şekil) Açma girişimini iptal etmeyi unuttum ve klasörü tutan da buydu ve izin vermedi silinecek.

Özet: mql dosyalarıyla çalışırken sorun yok.

 

Alexey Viktorov :

Şans eseri, probleminizin ne olduğunu keşfettim:

Deney sırasında, dosyanın oluşturulmasını ve silinmesini izlemek için Explorer'da veya başka bir dosya yöneticisinde bir klasör açılır. Ve dosyayı sildikten sonra klasör meşgul kalır ve silinemez. Sonuç olarak, alıyoruz

 2017.08 . 29 09 : 42 : 15.657 Demo_FolderDelete (CADJPY,H4)   Не удалось удалить папку nonempty. Код ошибки= 5024

Ancak, bir klasörü silmek için başarısız bir girişimden sonra, bu klasörün ne yazık ki meşgul kalması bir gerçektir. Şimdi bununla ilgili SD'ye bir uygulama oluşturulacak.

Bu davranışa tamamen farklı koşullar altında rastladım - ayrıca silme klasörünü açık tutarak programlar/komut dosyaları/svn vb. bu klasör silinemedi.

Ve her zaman aynı şekilde ele alınır - bu klasörü manuel olarak yıkarak. Yani bu bir terminal veya editör problemi değil.

 
Rashid Umarov :

Bu davranışa tamamen farklı koşullar altında rastladım - ayrıca silme klasörünü açık tutarak programlar/komut dosyaları/svn vb. bu klasör silinemedi.

Ve her zaman aynı şekilde ele alınır - bu klasörü manuel olarak yıkarak. Yani bu bir terminal veya editör problemi değil.

Mesajımı biraz sonra güncelledim.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

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

Alexey Viktorov , 2017.08.29 08:55


not; Ne yazık ki, deney sırasında ben de berbattım. Dosyaya yazdıktan sonra verileri diske attım, not defteri ile açmaya çalıştım ama yanıt geldi... (şekil) Açma girişimini iptal etmeyi unuttum ve klasörü tutan da buydu ve buna izin vermedi silinecek.

Özet: mql dosyalarıyla çalışırken sorun yok.


Bu ekleme olmadan mesajımı alıntılaman garip.

 
Alexey Viktorov :

Mesajımı biraz sonra güncelledim.


Bu ekleme olmadan mesajımı alıntılaman garip.

SD'nin yanıtına hazır olmanız için.

 
Rashid Umarov :

SD'nin yanıtına hazır olmanız için.

Öyleyse sorunun nedenini anlarsam, neden SD ile her türlü saçmalığı yazalım? Yazmayı reddettiğimi yüksek sesle söylemedim ... Zaten herkesin anladığını düşündüm.
 
Rashid Umarov :

Bu davranışa tamamen farklı koşullar altında rastladım - ayrıca silme klasörünü açık tutarak programlar/komut dosyaları/svn vb. bu klasör silinemedi.

Ve her zaman aynı şekilde ele alınır - bu klasörü manuel olarak yıkarak. Yani bu bir terminal veya editör problemi değil.

Ancak dosya yöneticisinde bir DOSYA DEĞİL bir klasör açma gerçeği, mql aracılığıyla silinmesini etkilemez.

 
Alexey Viktorov :

1. Okumak için bir dosyayı açarken , dosya tanıtıcısını alırız .

2. Başka bir dosyaya yazmak için başka bir dosyanın tanıtıcısına ihtiyacınız vardır, bu nedenle onu başka bir değişkende saklamanız önerilir. Yeni bir dosyaya yazıldıktan sonra, iki dosyanın tutamaçları iki değişkende saklanır, her iki dosya da bu tutamaçlar kullanılarak kapatılır.

3. Dosya, ne zaman ve kim tarafından bilinmiyorsa, bu dosyanın herhangi bir uygulama tarafından işgal edilmemesi çok olasıdır. Bu dosyayı herhangi bir amaçla açarsanız, FileOpen işlevi tarafından alınan bir tanıtıcınız zaten vardır ve buna göre klasörü temizlemeden önce onu kapatmanız gerekir.

4. Mevcut bir mql programından dosya kopyalarken, dosya tanıtıcısına kesinlikle gerek yoktur.

5. Dosyayı kopyaladıktan sonra bu dosya açılmıyor ve kapatmaya gerek yok.


1. Tutamaç yalnızca FileClose işlevi için gereklidir. Dosyayı açmıyorum. Benden önce yaratıldı. Sadece kopyalayıp yapıştırıyorum. Kulp olmadığı için kapatamıyorum.

2. Kopyalama (FileCopy), taşıma (FileMove) için dosya tanıtıcısına gerek yoktur. Belgelere bakın.

3. Daha önce biri tarafından oluşturulan bir dosyayı FileOpen işleviyle açarsam, tutamağını alamayacağım. Hangi kolu alacağım hiç bilinmiyor. Onun olabilir veya tamamen farklı olabilir. Bir başkasının dosyasını, kopyalama işleminden sonra FileClose tarafından kapatılacak şekilde ele almaya çalıştım. Hiç bir şey.

4. Kopyalama sırasında tutamaç gerekli değildir. Sorunsuz kopyalandı. Ancak dosya kopyalamak için otomatik olarak açılır. Ardından, tutamaç olmadığı için FileClose s ile kapatamıyorum. Bu muhtemelen, kopyalanan dosyaları sildikten sonra FolderClean'in çalışmamasının nedenidir.

5. Kopyaladıktan sonra dosyanın açılmadığını nasıl anlarsınız? Açıkça FileOpen işlevi tarafından açılmadı, ancak onunla kopyalandı, yani açık. Bu nedenle, kopyalandıktan sonra ve hatta silindikten sonra açık kalır. Muhtemelen.

Neden: