Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Demonstra várias operações de arquivo usando o .NET Framework.
Os tópicos seguintes demonstram o uso de classes definidas no namespace System.IO para realizar várias operações em ficheiros.
Enumerar arquivos em um diretório
O exemplo de código a seguir demonstra como recuperar uma lista dos arquivos em um diretório. Além disso, os subdiretórios são enumerados. O exemplo de código a seguir usa os GetFilesGetFiles métodos e GetDirectories para exibir o conteúdo do diretório C:\Windows.
Exemplo
// enum_files.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
int main()
{
String^ folder = "C:\\";
array<String^>^ dir = Directory::GetDirectories( folder );
Console::WriteLine("--== Directories inside '{0}' ==--", folder);
for (int i=0; i<dir->Length; i++)
Console::WriteLine(dir[i]);
array<String^>^ file = Directory::GetFiles( folder );
Console::WriteLine("--== Files inside '{0}' ==--", folder);
for (int i=0; i<file->Length; i++)
Console::WriteLine(file[i]);
return 0;
}
Monitorar alterações no sistema de arquivos
O exemplo de código a seguir usa FileSystemWatcher para registrar eventos correspondentes a arquivos que estão sendo criados, alterados, excluídos ou renomeados. Em vez de sondar periodicamente um diretório para alterações em arquivos, você pode usar a FileSystemWatcher classe para disparar eventos quando uma alteração é detetada.
Exemplo
// monitor_fs.cpp
// compile with: /clr
#using <system.dll>
using namespace System;
using namespace System::IO;
ref class FSEventHandler
{
public:
void OnChanged (Object^ source, FileSystemEventArgs^ e)
{
Console::WriteLine("File: {0} {1}",
e->FullPath, e->ChangeType);
}
void OnRenamed(Object^ source, RenamedEventArgs^ e)
{
Console::WriteLine("File: {0} renamed to {1}",
e->OldFullPath, e->FullPath);
}
};
int main()
{
array<String^>^ args = Environment::GetCommandLineArgs();
if(args->Length < 2)
{
Console::WriteLine("Usage: Watcher.exe <directory>");
return -1;
}
FileSystemWatcher^ fsWatcher = gcnew FileSystemWatcher( );
fsWatcher->Path = args[1];
fsWatcher->NotifyFilter = static_cast<NotifyFilters>
(NotifyFilters::FileName |
NotifyFilters::Attributes |
NotifyFilters::LastAccess |
NotifyFilters::LastWrite |
NotifyFilters::Security |
NotifyFilters::Size );
FSEventHandler^ handler = gcnew FSEventHandler();
fsWatcher->Changed += gcnew FileSystemEventHandler(
handler, &FSEventHandler::OnChanged);
fsWatcher->Created += gcnew FileSystemEventHandler(
handler, &FSEventHandler::OnChanged);
fsWatcher->Deleted += gcnew FileSystemEventHandler(
handler, &FSEventHandler::OnChanged);
fsWatcher->Renamed += gcnew RenamedEventHandler(
handler, &FSEventHandler::OnRenamed);
fsWatcher->EnableRaisingEvents = true;
Console::WriteLine("Press Enter to quit the sample.");
Console::ReadLine( );
}
Ler um arquivo binário
O exemplo de código a seguir mostra como ler dados binários de um arquivo, usando duas classes do System.IO namespace: FileStream e BinaryReader. FileStream representa o arquivo real. BinaryReader Fornece uma interface para o fluxo que permite acesso binário.
O exemplo de código lê um arquivo chamado data.bin e contém inteiros em formato binário. Para obter informações sobre esse tipo de arquivo, consulte Como gravar um arquivo binário (C++/CLI).
Exemplo
// binary_read.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;
int main()
{
String^ fileName = "data.bin";
try
{
FileStream^ fs = gcnew FileStream(fileName, FileMode::Open);
BinaryReader^ br = gcnew BinaryReader(fs);
Console::WriteLine("contents of {0}:", fileName);
while (br->BaseStream->Position < br->BaseStream->Length)
Console::WriteLine(br->ReadInt32().ToString());
fs->Close( );
}
catch (Exception^ e)
{
if (dynamic_cast<FileNotFoundException^>(e))
Console::WriteLine("File '{0}' not found", fileName);
else
Console::WriteLine("Exception: ({0})", e);
return -1;
}
return 0;
}
Ler um ficheiro de texto
O exemplo de código a seguir demonstra como abrir e ler um arquivo de texto uma linha de cada vez, usando a StreamReader classe definida no System.IO namespace. Uma instância dessa classe é usada para abrir um arquivo de texto e, em seguida, o System.IO.StreamReader.ReadLine método é usado para recuperar cada linha.
Este exemplo de código lê um arquivo chamado textfile.txt e contém texto. Para obter informações sobre esse tipo de arquivo, consulte Como escrever um arquivo de texto (C++/CLI).
Exemplo
// text_read.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;
int main()
{
String^ fileName = "textfile.txt";
try
{
Console::WriteLine("trying to open file {0}...", fileName);
StreamReader^ din = File::OpenText(fileName);
String^ str;
int count = 0;
while ((str = din->ReadLine()) != nullptr)
{
count++;
Console::WriteLine("line {0}: {1}", count, str );
}
}
catch (Exception^ e)
{
if (dynamic_cast<FileNotFoundException^>(e))
Console::WriteLine("file '{0}' not found", fileName);
else
Console::WriteLine("problem reading file '{0}'", fileName);
}
return 0;
}
Recuperar informações do arquivo
O exemplo de código a seguir demonstra a FileInfo classe. Quando você tem o nome de um arquivo, você pode usar essa classe para recuperar informações sobre o arquivo, como o tamanho do arquivo, diretório, nome completo e data e hora da criação e da última modificação.
Este código recupera informações de arquivo para Notepad.exe.
Exemplo
// file_info.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
int main()
{
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length < 2)
{
Console::WriteLine("\nUSAGE : file_info <filename>\n\n");
return -1;
}
FileInfo^ fi = gcnew FileInfo( args[1] );
Console::WriteLine("file size: {0}", fi->Length );
Console::Write("File creation date: ");
Console::Write(fi->CreationTime.Month.ToString());
Console::Write(".{0}", fi->CreationTime.Day.ToString());
Console::WriteLine(".{0}", fi->CreationTime.Year.ToString());
Console::Write("Last access date: ");
Console::Write(fi->LastAccessTime.Month.ToString());
Console::Write(".{0}", fi->LastAccessTime.Day.ToString());
Console::WriteLine(".{0}", fi->LastAccessTime.Year.ToString());
return 0;
}
Escrever um arquivo binário
O exemplo de código a seguir demonstra a gravação de dados binários em um arquivo. Duas classes do System.IO namespace são usadas: FileStream e BinaryWriter. FileStream representa o arquivo real, enquanto BinaryWriter fornece uma interface para o fluxo que permite acesso binário.
O exemplo de código a seguir grava um arquivo contendo inteiros em formato binário. Este arquivo pode ser lido com o código em Como: Ler um arquivo binário (C++/CLI).
Exemplo
// binary_write.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;
int main()
{
array<Int32>^ data = {1, 2, 3, 10000};
FileStream^ fs = gcnew FileStream("data.bin", FileMode::Create);
BinaryWriter^ w = gcnew BinaryWriter(fs);
try
{
Console::WriteLine("writing data to file:");
for (int i=0; i<data->Length; i++)
{
Console::WriteLine(data[i]);
w->Write(data[i]);
}
}
catch (Exception^)
{
Console::WriteLine("data could not be written");
fs->Close();
return -1;
}
fs->Close();
return 0;
}
Escrever um ficheiro de texto
O exemplo de código a seguir demonstra como criar um arquivo de texto e gravar texto nele usando a StreamWriter classe, que é definida no System.IO namespace. O StreamWriter construtor recebe o nome do ficheiro a ser criado. Se o arquivo existir, ele será substituído (a menos que você passe True como o segundo StringWriter argumento do construtor).
O arquivo é então arquivado usando as Write funções e WriteLine .
Exemplo
// text_write.cpp
// compile with: /clr
using namespace System;
using namespace System::IO;
int main()
{
String^ fileName = "textfile.txt";
StreamWriter^ sw = gcnew StreamWriter(fileName);
sw->WriteLine("A text file is born!");
sw->Write("You can use WriteLine");
sw->WriteLine("...or just Write");
sw->WriteLine("and do {0} output too.", "formatted");
sw->WriteLine("You can also send non-text objects:");
sw->WriteLine(DateTime::Now);
sw->Close();
Console::WriteLine("a new file ('{0}') has been written", fileName);
return 0;
}
Ver também
Programação .NET com C++/CLI (Visual C++)
E/S de arquivo e fluxo
System.IO namespace