Lucrul cu fisiere . Partea a II-a
[English version] [MQLmagazine.com in english] [Editia romaneasca]
Acest articol este continuarea la articolul Lucrul cu fisiere . Partea I si se doreste exemplificarea partii I.
Articolul arata intr-un cod folosirea functiilor prezentate in partea I a articolului.
Inainte de asta insa, cateva precizari.
MetaQuotes a schimbat antetul functiei FileOpen().
1 2 3 4 5 6 | int FileOpen( string file_name, // Numele fisierului int open_flags, // Combinatie de flags short delimiter='\t' // Delimitator uint codepage=CP_ACP // Pagina de cod ); |
Ceea ce s-a adaugat, este pagina de cod, care se foloseste la conversia variabilelor string. Default este CP_ACP (Ansi Code Page).
De luat in seama la folosirea lui FileOpen(): daca FILE_ANSI nu este folosit, FILE_UNICODE este prezumat; chiar si sfarsitul de linie este asteptat ca unicode (CRLF se intinde pe 4 bytes nu pe 2).
In ce priveste functia FileIsLineEnding(), a carei aplicare parea neclara in articolul precedent, exista o mica smecherie de stiut: intr-adevar, functia se poate utiliza numai pe fisiere text, FILE_TXT, si raspunde adevarat numai cand sfarstitul liniei este atins folosind FileReadString(). Nu prin deplasarea pointerului de fisier. Totusi, aduceti-va aminte ca marea majoritate a fisierelor text sunt ANSI. Nu uitati sa specificati FILE_ANSI. Altfel toate citirile vor fi anormale, inclusiv faptul ca FileIsEnding() va da raspunsuri incorecte!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | //+------------------------------------------------------------------+ //| WorkWithFiles.mq5 | //| Copyright Baltatu Bogdan | //| http:\\mqlmagazine.com | //+------------------------------------------------------------------+ #property copyright "Baltatu Bogdan" #property link "http:\\mqlmagazine.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int file_handle,size=-1,i; bool res; string svalue,filename; long search; //FileOpen file_handle=FileOpen("test.txt",FILE_WRITE|FILE_TXT); if(file_handle==-1) Print("FileOpen error.ErrorNo:",GetLastError()); else Print("FileOpen success!"); //FileIsExist res=FileIsExist("test.txt"); if(res)Print("File exist!!"); else Print("File not found!!"); //FileWrite svalue="abcdef\r\nghijkl"; size=StringLen(svalue); FileWriteString(file_handle,svalue,size); //FileFlush FileFlush(file_handle); //FileClose FileClose(file_handle); file_handle=FileOpen("test.txt",FILE_TXT|FILE_READ); //FileTell FileTell(file_handle); Print("Cursor position:",FileTell(file_handle)); //FileSeek FileSeek(file_handle,0,SEEK_SET); //FileClose FileClose(file_handle); //FileCopy res=FileCopy("test.txt",0,"test1.txt",FILE_REWRITE); if(res) Print("FileCopy Succes"); else Print("FileCopy Faild.ErrorNo:",GetLastError()); //FileMove res=FileMove("test.txt",0,"move_test.txt",FILE_REWRITE); if(res) Print("FileMove Succes!"); else Print("FileMove Faild!ErrorNo:",GetLastError()); //FileDelete search=FileFindFirst("*.*",filename); if(search!=INVALID_HANDLE) { Print("FileFindFirst returned",filename); while(FileFindNext(search,filename)) { i++; Print(i,":",filename); } FileFindClose(filename); } else Print("Files not found!!!"); FileDelete("test.txt"); } //+------------------------------------------------------------------+ |