Os arquivos temporários devem ser armazenados no diretório temporário do sistema operacional por vários motivos:
-
O sistema operacional torna muito fácil criar esses arquivos, garantindo que seus nomes sejam exclusivos .
-
A maioria dos softwares de backup sabe quais são os diretórios que contêm arquivos temporários e os ignora. Se você usar o diretório atual, isso poderá ter um efeito importante no tamanho dos backups incrementais se os backups forem feitos com frequência.
-
O diretório temporário pode estar em um disco diferente ou na RAM, tornando o acesso de leitura / gravação muito mais rápido .
-
Os arquivos temporários geralmente são excluídos durante a reinicialização (se estiverem em um ramdisk, eles serão simplesmente perdidos). Isso reduz o risco de crescimento infinito se seu aplicativo nem sempre estiver removendo os arquivos temporários corretamente (por exemplo, após uma falha).
A limpeza de arquivos temporários do diretório de trabalho pode facilmente tornar-se confusa se os arquivos forem armazenados junto com os arquivos do aplicativo e do usuário. Você pode atenuar esse problema criando um diretório separado no diretório atual, mas isso pode levar a outro problema:
-
O comprimento do caminho pode ser muito longo em algumas plataformas. Por exemplo, no Windows, os limites de caminho para algumas APIs, frameworks e aplicativos são terríveis , o que significa que você pode acessar facilmente esses limite se o diretório atual já estiver na hierarquia da árvore e os nomes de seus arquivos temporários forem muito longos.
-
Nos servidores, o monitoramento do crescimento do diretório temporário geralmente é feito imediatamente. Se você usar um diretório diferente, ele pode não ser monitorado e monitorar o disco inteiro não ajudará a descobrir facilmente que são os arquivos temporários que ocupam cada vez mais espaço.
Quanto ao acesso negado, certifique-se de permitir que o sistema operacional crie um arquivo temporário para você. O sistema operacional pode, por exemplo, saber que, para um determinado usuário, um diretório diferente de /tmp
ou C:\Windows\temp
deve ser usado; assim, acessando esses diretórios diretamente, você pode de fato encontrar um erro de acesso negado.
Se você obtiver um acesso negado mesmo quando estiver usando a chamada do sistema operacional, significa simplesmente que a máquina estava mal configurada; isso foi já explicado pelo Blrfl . Cabe ao administrador do sistema configurar a máquina; você não precisa alterar seu aplicativo.
Criar arquivos temporários é simples em muitos idiomas. Alguns exemplos:
-
Bash:
# The next line will create a temporary file and return its path. path="$(mktemp)" echo "Hello, World!" > "$path"
-
Python:
import tempfile # Creates a file and returns a tuple containing both the handle and the path. handle, path = tempfile.mkstemp() with open(handle, "w") as f: f.write("Hello, World!");
-
C #:
// Creates a file and returns the path. var path = Path.GetTempFileName(); File.WriteAllText(path, "Hello, World!");
-
PHP:
# Creates a file and returns the handle. $temp = tmpfile(); fwrite($temp, "Hello, World!"); fclose($temp);
-
Ruby:
require "tempfile" # Creates a file and returns the file object. file = Tempfile.new "" file << "Hello, World!" file.close
Observe que, em alguns casos, como no PHP e no Ruby, o arquivo é removido quando o identificador é fechado. Esse é um benefício adicional de usar as bibliotecas incluídas no idioma / estrutura.