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");
  }
//+------------------------------------------------------------------+

Leave a Reply