Académique Documents
Professionnel Documents
Culture Documents
Manipulação de pastas
minhaPasta
c:\exemplo
minhaPasta
?
Figura 2. A pasta referenciada não existe
if (minhaPasta.Exists)
{
MessageBox.Show(“A pasta existe”);
}
else
{
MessageBox.Show(“A pasta não existe”);
}
Para o caso em que a pasta não existe, pode ser que queiramos criar
essa pasta. Para isso utilizamos o método Create() da classe
DirectoryInfo. Observe o exemplo a seguir:
using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace ExemploArquivosSimples
{
public partial class Form1 : Form
{
DirectoryInfo minhaPasta = null;
FileInfo meuArquivo = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
minhaPasta = new DirectoryInfo(@textBox1.Text);
if (minhaPasta.Exists)
{
MessageBox.Show("A pasta existe");
}
else
{
if (MessageBox.Show("A pasta não existe, deseja criá-
la?", "Aviso", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
//cria a pasta
minhaPasta.Create();
}
}
}
} Criação de uma
} nova pasta
Ao mover uma pasta, você deve ser preocupar com duas questões, não
contando o fato de pasta existir ou não. Primeiro qual o caminho da
pasta atual a ser movida. Segundo qual o novo caminho de destino da
pasta a ser movida (incluindo seu nome original ou um novo nome).
if (minhaPasta.Exists) Movimentação da
{
try
pasta
{
minhaPasta.MoveTo(@strCaminhoDestino);
Na maioria das vezes vamos utilizar essa função na sua segunda versão,
com o parâmetro igual a true, ou seja excluiremos a pasta e seu
conteúdo interno também.
Vejamos um exemplo:
Manipulação de arquivos
meuArquivo
c:\exemplo.txt
meuArquivo
?
Figura 4. O arquivo referenciado não existe
Para sabermos se o arquivo de fato existe podemos utilizar a
propriedade Exists. Essa propriedade retorna true caso o arquivo exista,
e retorna false caso ele não exista.
if (meuArquivo.Exists)
{
MessageBox.Show(“O arquivo existe”);
}
else
{
MessageBox.Show(“O arquivo não existe”);
}
Criação de arquivo
O arquivo pode ser criado, caso ele não exista, utilizando-se o método
Create(). Veja um exemplo:
if (!meuArquivo.Exists)
{
meuArquivo.Create();
}
Exemplo:
if (meuArquivo.Exists)
{
try
{
Cópia de um arquivo
meuArquivo.CopyTo(@"d:\exemp.txt");
}
catch (Exception objExcessao)
{
MessageBox.Show(objExcessao.Message, "Erro");
}
}
else
{
MessageBox.Show("Arquivo inexistente", "Erro");
}
Movimento de um arquivo
if (meuArquivo.Exists)
{ Movimento de um arquivo
try
{
meuArquivo.MoveTo(@"d:\projetos\exemp.txt");
}
catch (Exception objExcessao)
{
MessageBox.Show(objExcessao.Message, "Erro");
}
}
else
{
MessageBox.Show("Arquivo inexistente", "Erro");
}
Exclusão de um arquivo
if (meuArquivo.Exists)
{
try
{
if (MessageBox.Show("Tem certeza que deseja excluir o arquivo?",
"Confirmação", MessageBoxButtons.YesNo)== DialogResult.Yes)
{
meuArquivo.Delete();
} Exclusão de um arquivo
}
catch (Exception objExcessao)
{
MessageBox.Show(objExcessao.Message, "Erro");
}
}
else
{
MessageBox.Show("Arquivo inexistente", "Erro");
}
Você deve ter reparado que não há um método para copiar pastas.
Infelizmente o framework DotNet não fornece esse método para pastas.
Isso não significa que não possamos criar esse método. O que torna
essa uma tarefa especial é que pela peculiaridade do sistema de
arquivos (sistema hierárquico) precisaremos utilizar um conceito de
programação conhecido como recursão.
Isso ocorre porque uma pasta pode conter arquivos e subpastas. Uma
subpasta pode conter arquivos e subpastas, e processo segue, até que
todo o conteúdo seja copiado.
Percebeu que não é uma tarefa simples? Mas você também deve ter
percebido que há uma certa repetição na forma como o processo é
realizado. Veja:
1. Cria-se a pasta
2. Para cada arquivo da pasta, copia-se o arquivo
É claro que isso tem que parar, senão teremos um loop infinito de
recursão. Mas sabemos que o processo terá uma parada pois não existe
pasta com infinitas subpastas.
if (!pastaOrigem.Exists)
{
MessageBox.Show("Pasta de origem informada não
existe", "Erro");
}
else
{
//tudo a partir de agora é feito dentro de um
try...catch
try
{
//verifica se a pasta destino é "raiz"
if (pastaDestino.Root.Name == pastaDestino.Name)
{
MessageBox.Show("A pasta destino não pode ser
uma pasta raiz", "Erro");
}
else
{
//verifica se a pasta "pai" da pasta destino
existe
if (!pastaDestino.Parent.Exists)
{
MessageBox.Show("O caminho para a pasta
destino não existe", "Erro");
}
else
{
//chama a função que copiará a pasta
origem para a pasta destino
CopiaPasta(pastaOrigem.FullName,
pastaDestino.FullName);
MessageBox.Show("Pasta copiada com
sucesso", "Aviso");
}
}
}
catch (Exception objExcecao)
{
MessageBox.Show(objExcecao.Message, "Erro");
}
}
}
}
Como você pode ver, uma função chamada CopiaPasta foi criada para
executar a cópia. Essa é tal função recursiva de que falávamos. Observe
como ela chama a ela mesma:
try
{
//cria o diretório de destino se ele não existir
if (!pDestino.Exists)
{
pDestino.Create();
}
Questões de segurança
Existe uma outra questão deve ser considerada, e por isso utilizamos os
blocos try...catch. No sistema operacional Windows, as pastas e os
arquivos podem ser protegidos, por questões de segurança, contra
cópia, movimento ou exclusão. Se a pasta ou arquivo estiver protegido,
a operação falhará e gerará uma exceção. Por isso utilizamos os blocos
try...catch.