Estou tentando criar um novo arquivo e as coisas não parecem funcionar como eu espero. Aqui está o que eu tentei:
File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"
De acordo com tudo que li online, todos devem funcionar, mas cada um deles me fornece o seguinte:
ERRNO::ENOENT: No such file or directory - out.txt
Isso acontece no IRB e também em um script Ruby. o que estou perdendo?
Errno::EACCES
, nãoENOENT
.Respostas:
Usar:
onde suas opções são:
r
- Somente leitura. O arquivo deve existir.w
- Crie um arquivo vazio para escrever.a
- Anexar a um arquivo. O arquivo é criado se ele não existir.r+
- Abra um arquivo para atualizar a leitura e a gravação. O arquivo deve existir.w+
- Crie um arquivo vazio para leitura e gravação.a+
- Abra um arquivo para ler e anexar. O arquivo é criado se não existir.No seu caso,
'w'
é preferível.OU você pode ter:
fonte
outFile
deve parecerout_file
.Experimentar
sem usar o
fonte
Tente usar
"w+"
como o modo de gravação em vez de apenas"w"
:fonte
w
) ou ler e escrever (w+
).Caso isso ajude outras pessoas, isso pode ocorrer quando você está tentando criar um novo arquivo em um diretório que não existe.
fonte
O diretório não existe. Verifique se ele existe, pois
open
não criará esses diretórios para você.Eu me deparei com isso um tempo atrás.
fonte
File.new
e oFile.open
padrão para o modo de leitura ('r'
) como um mecanismo de segurança, para evitar a possibilidade de sobrescrever um arquivo. Temos que dizer explicitamente ao Ruby para usar o modo de gravação ('w'
é a maneira mais comum) se quisermos produzir o arquivo.Se o texto a ser produzido for uma sequência, em vez de escrever:
ou pior:
Use o mais sucinto
write
:write
tem modos permitido para que possamos utilizar'w'
,'a'
,'r+'
se necessário.open
com um bloco é útil se você precisar calcular a saída em um loop iterativo e desejar deixar o arquivo aberto enquanto o faz.write
é útil se você quiser exibir o conteúdo de uma só vez e feche o arquivo.Consulte a documentação para obter mais informações.
fonte
Se o objetivo é apenas criar um arquivo, a maneira mais direta que vejo é:
fonte
Você pode usar
File.write('name of file here', data)
fonte
Você também pode usar constantes em vez de cadeias para especificar o modo desejado. O benefício é que, se você digitar um nome de erro constante, seu programa gerará uma exceção de tempo de execução.
As constantes são
File::RDONLY
ouFile::WRONLY
ouFile::CREAT
. Você também pode combiná-los, se quiser.Descrição completa dos modos de abertura de arquivo em ruby-doc.org
fonte