lang • open

OPEN

Stream = OPEN FileName [ FOR [ READ | INPUT ] [ WRITE | OUTPUT ] [ CREATE | APPEND ] [ WATCH ] ]

Abre um arquivo para leitura, escrita, criar, ou anexar dados. O arquivo deve existir, ou a palavra-chave CREATE deve ser usada.

  • Se a palavra-chave CREATE for especificada, o arquivo é criado, ou deletado, se ele já existir.

  • Se a palavra-chave APPEND for especificada, então o ponteiro é movido para o final do arquivo logo após o arquivo ser aberto.

  • Se a palavras-chave READ ou WRITE são especificadas, então, a entrada e saída não são buffered.

  • Se a palavras-chave INPUT ou OUTPUT são especificadas, então, a entrada e saída são buffered.

  • Se a palavra-chave WATCH for especificada, o arquivo é vigiado pelo interpretador através do select(2) sistema call :

    • Se pelo menos um byte pode ser lido a partir do arquivo, então, o manipulador de eventos file_read() é chamado.

    • Se pelo menos um byte pode ser escrito para o arquivo, então, o manipulador de eventos file_write() é chamado.

Se o arquivo for aberto com êxito, um objeto Stream é retornado à variável Stream.

Por padrão, os streams são buffered.

Se você quer ter um fluxo sem buffer, você deve usar a palavra-chave READ ou WRITE explicitamente.

Ao contrário de outros dialetos básicos, Gambas nunca vai apagar o conteúdo de um arquivo quando ele é aberto com a palavra-chave WRITE. Assim, se o novo conteúdo é menor do que o antigo, algum lixo da versão do arquivo antigo permanecerá no final do novo arquivo. Para evitar isso, abra o arquivo, incluindo a palavra-chave CREATE.

Erros

Mensagem

Descrição
Acesso proibido (#43) O acesso solicitado para o arquivo não é permitido, ou permissão de busca é negada por um dos diretórios no prefixo do caminho ou o arquivo ainda não existe e o acesso ao diretório pai para escrever não é permitido.
Arquivo é um diretório (#46) FileName refere-se a um diretório. Use a função Dir no lugar!
Arquivo ou diretório não existente (#45) FileName não existe, ou um componente do diretório em pathname não existe ou é uma ligação simbólica.
Sem memória (#1) O sistema ficou sem memória.
Dispositivo está cheio (#37) FileName estava a ser criado, mas o dispositivo contendo FileName não tem espaço para o novo arquivo.
Não é um diretório (#49) Um componente usado como um diretório em FileName não é, de fato, um diretório.
Erro de sistema... (#42) Outros erros de sistema possíveis:
  • Muitas ligações simbólicas foram encontradas na resolução de FileName.

  • O processo já tem o número máximo de arquivos abertos.

  • O limite do sistema sobre o número total de arquivos abertos foi atingido.

  • FileName refere-se a um arquivo especial de dispositivo e não existe nenhum dispositivo correspondente.

  • O arquivo chamado é um pipe nomeado e nenhum processo tem o arquivo aberto para leitura.

  • FileName refere-se a um arquivo em um sistema de arquivos somente leitura e o acesso de escrita foi solicitado.

  • FileName refere-se a uma imagem executável que está sendo executada e acesso de gravação foi solicitado.

Exaemplos

' Imprime o conteúdo de um arquivo de texto para a tela
DIM hFile AS File
DIM sLine AS String

hFile = OPEN "/etc/passwd" FOR INPUT

WHILE NOT Eof(hFile)
  LINE INPUT #hFile, sLine
  PRINT sLine
WEND
' Assistindo uma porta serial

DIM hFile AS File

hFile = OPEN "/dev/ttyS0" FOR READ WRITE WATCH

...

PUBLIC SUB File_Read()

  DIM iByte AS Byte

  READ #hFile, iByte
  PRINT "Got one byte: "; iByte

END
' Lendo dados de um arquivo BMP, conhecido por usar o formato little-endian:

DIM hFile AS File
DIM iData AS Integer

hFile = OPEN "image.bmp" FOR INPUT
hFile.ByteOrder = gb.LittleEndian
...
READ #hFile, iData

Veja também