Why not do something like: 
    
    
    template withFile(f: string, mode: string, statements: untyped) =
        var fileMode: FileMode
        case mode
        of "r":     fileMode = FileMode.fmRead
        of "w":     fileMode = FileMode.fmWrite
        of "a+":    fileMode = FileMode.fmReadWrite
        of "r+":    fileMode = FileMode.fmReadWriteExisting
        
        var file {.inject.} = open(f, fileMode)
        defer: file.close()
        statements
    

usage example: 
    
    
    withFile("/path/to/file", "r"):
        while not endOfFile(file):
            echo(file.readLine())
    

Reply via email to