----- Original Message ----- 
    
    
    Sent: Thursday, October 30, 2008 7:33 
    AM
    Subject: Re: [amibroker] How to 
    fclose()/fdelete() left open files from afl
    
    Herman,
     
    Best method to avoid problems, 
    interdependenices is to 
    open file, do the reading/writing you need and 
    close the file all within ONE funciton.
    Don't worry too much about the open/close 
    performance as system caches file access and you are not
    really accesing disk file physically, but its 
    file system virtual cache in RAM.
     
    Do not keep files open between functions, all 
    file operation should be encapsulated in one function
    that does the job.
     
    You should keep dependencies between functions 
    at lowest possible level (ideal: zero).
    Funcitons should only communicate via one entry 
    point (input parameters) and one defined result.
    
Best 
    regards,
Tomasz Janeczko
amibroker.com
    
      ----- Original Message ----- 
      
      
      Sent: Thursday, October 30, 2008 3:19 
      PM
      Subject: Re: [amibroker] How to 
      fclose()/fdelete() left open files from afl
      
      I am now using this, somewhat awkward, method to monitor file 
      open/close operations. I wrapped fopen() with xfopen() and fclose() with 
      xclose(). 
      
      I post this just in case someone has similar debugging problems.
      
      Herman
      
      function Trace( Msg )
      {
          TraceEnabled = Nz( StaticVarGet( "TraceEnabled" ) );
          if ( TraceEnabled ) 
      _TRACE( Msg );
      }
      
      function TRACEONCE( Msg )
      {
          TraceEnabled = Nz( StaticVarGet( "TraceEnabled" ) );
          if ( TraceEnabled 
)
          {
              PrevMessage = StaticVarGetText( 
      "LastTraceMsg" );
              if ( 
      PrevMessage != Msg )
              {
                  _TRACE( Msg );
                  StaticVarSetText( 
      "LastTraceMsg", Msg );
              }
          }
      }
      
      function xfopen( filename, mode )
      {
          fh = fopen( filename, mode );
          StaticVarSetText("FM"+fh, filename + " Mode: "+Mode 
);
          TraceOnce("FILE Opened: "+ filename+ " Mode: "+Mode);
          return fh;
      }
      
      function xfclose( Handle ) 
      {
          fclose( Handle );
          FileMode = StaticVarGetText("FM"+Handle );
          TraceOnce("FILE Closed: "+ FileMode );
      }
      
      
      Thursday, October 30, 2008, 8:46:25 AM, you wrote:
      
      
      
        
        
          | 
             >  | 
          
             It often happens during development that, due 
            to coding errors, files are not closed. The only way to close these 
            file appears to be to use an external UnLock program to UnLock and 
            delete the file. Since I use many files it is very time consuming to 
            locate the open files and the afl errors that caused 
them. 
            
  
            I'd like advice from experienced programmers on 
            how to detect, locate, and close files left open due to mistakes, 
            from afl of course. 
            
  
            many thanks for any suggestions you may 
            have, 
            
  
            herman 
            
  
            
  
            
  
              
            
  
               |