> For the complete documentation index, see [llms.txt](https://trizen.gitbook.io/sidef-lang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://trizen.gitbook.io/sidef-lang/syntax_and_semantics/literals/filehandle.md).

# FileHandle

Abstraction on a file descriptor, to interact with the content of a file.

```ruby
var a = File("existing_file.txt").open_r      # open file for reading
var b = File("new_file.txt").open_w           # open file for writing
```

Some useful methods on FileHandle objects:

```ruby
fh.autoflush(bool)      # enable/disable auto-flush mode
fh.binmode(encoding)    # set encoding
fh.line                 # read one line as a String
fh.slurp                # read the entire file as a String
fh.lines                # read the entire file as an Array of String objects
fh.grep { ... }         # collect only the lines that match the block
fh.grep(/regex/)        # collect only the lines that match the regex
fh.each { ... }         # iterate over each line
fh.eof                  # true when at the end of the file
fh.tell                 # current position in the file
fh.seek(pos,whence)     # jump to this position in the file
fh.lock                 # lock the filehandle
fh.unlock               # unlock the filehandle
fh.say(str)             # write a string into the file (appending "\n")
fh.print(str)           # write a string into the file (without appending "\n")
fh.close                # close the filehandle
```

The special `FileHandle` type can be for checking if a given object is really a FileHandle object:

```ruby
fh.kind_of(FileHandle)    # true if `fh` is a FileHandle object
```

The file object to which a FileHandle refers, if any, can be obtained with `fh.file`, which may be `nil` or a `File` object.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://trizen.gitbook.io/sidef-lang/syntax_and_semantics/literals/filehandle.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
