Como criar um arquivo temporário (por escrito a) em C #?

votos
14

Duplicate possíveis:
Criação de pastas tempory

Eu estou procurando algo como o tempfilemódulo em Python: A (de preferência) forma segura de abrir um arquivo para gravar. Isso deve ser fácil de apagar quando eu terminar também ...

Ao que parece, não .NET não tem as baterias incluídas características do tempfilemódulo, que não só cria o arquivo, mas retorna o descritor de arquivo (velha escola, eu sei ...) para que, juntamente com o caminho. Ao mesmo tempo, ela deixa claro que somente o usuário criar pode acessar o arquivo e outros enfeites ( mkstemp()eu acho): https://docs.python.org/library/tempfile.html


Ah, sim, eu posso ver isso. Mas GetTempFileName tem uma desvantagem: Existe uma condição de corrida entre o momento em que o arquivo foi criado (mediante chamada para GetTempFileName um arquivo 0 byte é criado) e quando eu chegar para abri-lo (depois do retorno de GetTempFileName). Isso pode ser um problema de segurança, embora não para o meu aplicativo atual ...

Publicado 21/08/2008 em 15:50
fonte usuário
Em outras línguas...                            


3 respostas

votos
23

Eu também tinha a mesma exigência antes, e eu criei uma pequena classe para resolvê-lo:

public sealed class TemporaryFile : IDisposable {
  public TemporaryFile() : 
    this(Path.GetTempPath()) { }

  public TemporaryFile(string directory) {
    Create(Path.Combine(directory, Path.GetRandomFileName()));
  }

  ~TemporaryFile() {
    Delete();
  }

  public void Dispose() {
    Delete();
    GC.SuppressFinalize(this);
  }

  public string FilePath { get; private set; }

  private void Create(string path) {
    FilePath = path;
    using (File.Create(FilePath)) { };
  }

  private void Delete() {
    if (FilePath == null) return;
    File.Delete(FilePath);
    FilePath = null;
  }
}

Ele cria um arquivo temporário em uma pasta especificada ou na pasta temporária do sistema. É uma classe descartável, assim, no final de sua vida (seja Disposeou o destruidor), ele exclui o arquivo. Você começa o nome do arquivo criado (e caminho) através da FilePathpropriedade. Você certamente pode estendê-lo também para abrir o ficheiro para escrita e voltar seus associados FileStream.

Um exemplo de uso:

using (var tempFile = new TemporaryFile()) {
    // use the file through tempFile.FilePath...
}
Respondeu 31/07/2010 em 15:20
fonte usuário

votos
6

Path.GetTempFileName e Path.GetTempPath. Então você pode usar este link para ler / escrever dados criptografados para o arquivo.

Note, .NET não é a melhor plataforma para aplicações críticas de segurança. Você tem que ser bem versado em como o CLR funciona, a fim de evitar algumas das armadilhas que possam expor seus dados críticos de hackers.

Edit: Sobre a condição de corrida ... Você poderia usar GetTempPath, em seguida, criar um nome de arquivo temporário usando

Path.Combine(Path.GetTempPath(), Path.ChangeExtension(Guid.NewGuid().ToString(), ".TMP"))
Respondeu 21/08/2008 em 15:53
fonte usuário

votos
0

Eu não sei de qualquer construído em (no quadro) aulas de fazer isso, mas eu imagino que não seria muito de um problema para rolar o seu próprio ..

Obviamente, isso depende do tipo de dados que você quer escrever a ele, e a "segurança" necessária ..

Este artigo em DevFusion pode ser um bom lugar para começar?

Respondeu 21/08/2008 em 15:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more