Como fazê-lo e/s de ficheiros básica no Visual C++ ou Visual C++ .NET

Traduções de Artigos Traduções de Artigos
Artigo: 307398 - Ver produtos para os quais este artigo se aplica.
Para um C+ ECMA do Microsoft Visual C++ .NET 2005/2008 / CLI versão deste artigo, consulte 950617.
Para obter uma versão do Microsoft Visual c# .NET do presente artigo, consulte 304430.
Para um Microsoft Visual Versão de .NET básica do presente artigo, consulte 304427.
Este artigo refere-se a os espaços de nomes de biblioteca de classes do Microsoft .NET Framework seguintes:
  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como efectuar seis basic ficheiro operações entrada/saída (e/s) no Microsoft Visual C++ 2005 ou no Microsoft Visual C++ .NET. Se for novo para o .NET Framework, que irá descobrir que o modelo de objectos para operações de ficheiros no .NET Framework é semelhante a FileSystemObject (FSO) que é popular com muitos programadores do Microsoft Visual Studio 6.0. Para fazer a transição mais fácil, a funcionalidade que é demonstrada no presente artigo baseia-se o seguinte artigo na Microsoft Knowledge Base:
186118 Como utilizar FileSystemObject com Visual Basic
Pode ainda utilizar FileSystemObject no .NET Framework. Porque FileSystemObject é um componente de serviços de informação Internet (COM, Component Object Model), requer o .NET Framework que acesso ao objecto ser através da camada de interoperabilidade. O .NET Framework gera um wrapper de o componente se pretende utilizá-lo. No entanto, a classe de ficheiro , a classe FileInfo , o directório, DirectoryInfo classes e outras classes relacionados no .NET Framework, oferecer funcionalidade não está disponível a força FsO, sem a sobrecarga do Camada Interop.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que são necessários:
  • Visual C++ 2005 ou o Visual C++ .NET

Operações de e/s de ficheiro demonstradas

Os exemplos neste artigo descrevem operações de e/s de ficheiro de base. A secção "Exemplo passo a passo" descreve como criar um programa de exemplo demonstra que as seguintes operações de e/s de seis ficheiro:
  • Ler um ficheiro de texto
  • Escrever um ficheiro de texto
  • Ver informações de ficheiro
  • Lista unidades de disco
  • Lista de pastas
  • Ficheiros de lista

Ler um ficheiro de texto

O código de exemplo seguinte utiliza uma classe de StreamReader para ler um ficheiro de texto. O conteúdo do ficheiro. adicionado a um controlo de caixa de listagem . O bloco tente... catch é utilizado para alertar o programa se o ficheiro está vazio. Não existe várias formas de determinar quando é atingido o fim do ficheiro; Este exemplo utiliza o método Peek para examinar a linha seguinte antes de ler.
  listBox1->Items->Clear();
   	try   
	{    
		String* textFile = String::Concat(windir,                                    (S"\\mytest.txt")); 
	        StreamReader *reader=new  StreamReader(textFile);
		do
		{
		    listBox1->Items->Add(reader->ReadLine());
		}   
		while(reader->Peek() != -1);
	}      
         
	catch (System::Exception *e)
	{ 
		listBox1->Items->Add(e);
	}

}
				
Nota No Visual C++ 2005, tem de adicionar a comuns language runtime suporte opção do compilador (/clr:oldSyntax) com êxito a compilar o código de exemplo anteriores como C++ gerido. Para adicionar a opção de compilador do suporte de runtime de idioma comum, siga estes passos:
  1. Clique em Projectoe, em seguida, clique emNomeProjecto Propriedades.

    NotaNomeProjecto é um marcador de posição para o nome do projecto.
  2. Expandir Propriedades de configuraçãoe, em seguida, clique emGeral.
  3. No painel da direita, clique para seleccionar Suporte em Runtime de idioma comum, a antiga sintaxe (/ clr:oldSyntax) noSuporte em Runtime de idioma comum definições do projecto.
  4. Clique emAplicare, em seguida, clique em OK.
Para mais informações sobre comum opções de compilador do suporte de runtime do idioma, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx

Escrever um ficheiro de texto

Este código de exemplo utiliza uma classe de StreamWriter para criar e escrever para um ficheiro. Se tiver um existente ficheiro, pode abri-lo da mesma forma.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"File created using StreamWriter class.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"File Written to C:\\KBTest.txt");
listBox1->Items->Add(filew);
				

Ver informações de ficheiro

Este código de exemplo utiliza uma classe FileInfo para aceder a propriedades de um ficheiro. Notepad.exe é utilizado no presente amostra. As propriedades aparecem num controlo de caixa de listagem .
 listBox1->Items->Clear();
 String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
 FileInfo *pFileProps  =new FileInfo(testfile);

 listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
 listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
				

Lista unidades de disco

Este código de exemplo utiliza as classes de directório e a unidade para listar as unidades lógicas num sistema. Neste exemplo, os resultados aparecem num controlo de caixa de listagem .
  listBox1->Items->Clear();
  String* drives[] = Directory::GetLogicalDrives();
  int numDrives = drives->get_Length();
  for (int i=0; i<numDrives; i++)
  {
	listBox1->Items->Add(drives[i]);
  } 
				

Lista de subpastas

Este código de exemplo utiliza o método de GetDirectories da classe de directório para obter uma lista de pastas.
listBox1->Items->Clear();
String* dirs[] = Directory::GetDirectories(windir);
int numDirs = dirs->get_Length();
for (int i=0; i<numDirs; i++)
{
listBox1->Items->Add(dirs[i]);
}
				

Ficheiros de lista

Este código de exemplo utiliza o método de GetFiles da classe de directório para obter uma listagem de ficheiros.
listBox1->Items->Clear();
String* files[]= Directory::GetFiles(this->windir);
int numFiles = files->get_Length();
for (int i=0; i<numFiles; i++)
{
  listBox1->Items->Add(files[i]);
}
				
Muitas coisas podem correr mal quando um utilizador obtiver acesso aos ficheiros. Os ficheiros pode não existir, os ficheiros podem estar em utilização ou os utilizadores não podem ter direitos o ficheiros de pastas estão a tentar aceder. Considere estas possibilidades, quando escreve o código para processar as excepções que podem ser gerado.

Exemplo passo a passo

  1. Inicie o Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 ou Microsoft Visual C++ 2005 Express Edition.
  2. Sobre o Ficheiro menu, aponte paraNovoe, em seguida, clique em Projecto.
  3. Em Tipos de projecto, clique emProjectos do Visual C++. Em Modelos secção, clique emAplicação de formulários do Windows (.NET).

    Nota No Visual Studio 2005, clique emVisual C++ em Tipos de projecto. Em Modelos, clique emAplicação do Windows Forms.
  4. Tipo KB307398 noNome caixa, escreva C:\ noLocalização e, em seguida, clique emOK.
  5. Abra o formulário Formulário1 na estrutura ver e, em seguida, prima F4 para abrir a Janela de Propertries.
  6. Na janela Propriedades, expanda o Tamanhopasta. No Largura caixa, escreva 700. No Altura caixa, escreva320.
  7. Adicione um Caixa de listagem controlo e seisBotão controlos ao Form1.

    Nota Para visualizar a caixa de ferramentas, clique em Caixa de ferramentas sobre o Vista menu.
  8. Na janela Propriedades, alterar oLocalização, o Nome, o Tamanho, oTabIndexe o Texto propriedades destes controlos do seguinte modo:
    Reduzir esta tabelaExpandir esta tabela
    ID de controloLocalizaçãoNomeTamanhoTabIndexTexto
    Button1500, 32Button1112, 231Ler o ficheiro de texto
    Button2500, 64Button2112, 232Escrever no ficheiro de texto
    button3500, 96button3112, 233Ver informações de ficheiro
    button4500, 128button4112, 234Lista unidades
    button5500, 160button5112, 235Lista de subpastas
    button6500, 192button6112, 236Ficheiros de lista
    listBox124. o, 24listBox1450, 2000listBox1
  9. Abra o ficheiro Form1.h. Na declaração de classe Form1 , declare uma variável de cadeia de caracteres privada com o seguinte código:
    private:
    		String *windir;
  10. No construtor de classe Form1 adicione o seguinte código:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Para efectuar operações de saída de entrada do ficheiro, adicione o System::IO espaço de nomes.
  12. Prima SHIFT + F7 para abrir o Form1 no Vista de estrutura. Faça duplo clique no botão Ler o ficheiro de texto e, em seguida, cole o seguinte código:

    Nota No Visual C++ 2005, clique em Designer no Vista menu.
    // How to read a text file:
    // Use try...catch to deal with a 0 byte file or a non-existant file.
    listBox1->Items->Clear();
    
    try   
    {    
    	String* textFile = String::Concat(windir, (S"\\mytest.txt")); 
    	StreamReader *reader=new  StreamReader(textFile);
    	do
    	{
    	listBox1->Items->Add(reader->ReadLine());
    	}   
    	while(reader->Peek() != -1);
    }    
    catch(FileNotFoundException *ex)
    {
    	listBox1->Items->Add(ex);
    }  
            
    catch (System::Exception *e)
    { 
    	listBox1->Items->Add(e);
    }
  13. Na vista de estrutura de Form1, faça duplo clique no botão de Escrever o ficheiro de texto e, em seguida, cole o seguinte código:
    // This demonstrates how to create and to write to a text file.
    StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
    pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
    pwriter->Close();
    listBox1->Items->Clear();
    String *filew = new String(S"File written to C:\\KBTest.txt");
    listBox1->Items->Add(filew);
  14. Na vista de estrutura de Form1, faça duplo clique no botão Ver informações de ficheiro e, em seguida, cole o seguinte código do método:
    // This code retrieves file properties. The example uses Notepad.exe.
    listBox1->Items->Clear();
    String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
    FileInfo *pFileProps  =new FileInfo(testfile);
    
    listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
    listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
  15. Na vista de estrutura de Form1, faça duplo clique no botão de Unidades da lista e, em seguida, cole o seguinte código:
    // This demonstrates how to obtain a list of disk drives.
    listBox1->Items->Clear();
    String* drives[] = Directory::GetLogicalDrives();
    int numDrives = drives->get_Length();
    for (int i=0; i<numDrives; i++)
    {
    	listBox1->Items->Add(drives[i]);
    }
  16. Na vista de estrutura de Form1, faça duplo clique no botão de Subpastas da lista e, em seguida, cole o seguinte código:
    // This code obtains a list of folders. This example uses the Windows folder.
    listBox1->Items->Clear();
    String* dirs[] = Directory::GetDirectories(windir);
    int numDirs = dirs->get_Length();
    for (int i=0; i<numDirs; i++)
    {
    	listBox1->Items->Add(dirs[i]);                                                    
    }
  17. Na vista de estrutura de Form1, faça duplo clique no botão de Ficheiros de lista e, em seguida, cole o seguinte código:
    // This code obtains a list of files. This example uses the Windows folder.
    listBox1->Items->Clear();
    String* files[]= Directory::GetFiles(this->windir);
    int numFiles = files->get_Length();
    for (int i=0; i<numFiles; i++)
    {
    	listBox1->Items->Add(files[i]);
    }
  18. Para compilar e executar o programa, prima CTRL + F5.

Exemplo de código completa

Nota Tem de alterar o código seguinte quando executado no Visual C++ 2005.
//Form1.h
#pragma once


namespace KB307398
{
	using namespace System;
	using namespace System::IO;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary> 
	/// Summary for Form1
	///
	/// WARNING: If you change the name of this class, you will need to change the 
	///          'Resource File Name' property for the managed resource compiler tool 
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public __gc class Form1 : public System::Windows::Forms::Form
	{
	private:
		String *windir;
	public:
		Form1(void)
		{
			windir = System::Environment::GetEnvironmentVariable("windir");
			InitializeComponent();
		}
  
	protected:
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
	private: System::Windows::Forms::Button *  button1;
	private: System::Windows::Forms::Button *  button2;
	private: System::Windows::Forms::Button *  button3;
	private: System::Windows::Forms::Button *  button4;
	private: System::Windows::Forms::Button *  button5;
	private: System::Windows::Forms::Button *  button6;
	private: System::Windows::Forms::ListBox *  listBox1;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container * components;

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = new System::Windows::Forms::Button();
			this->button2 = new System::Windows::Forms::Button();
			this->button3 = new System::Windows::Forms::Button();
			this->button4 = new System::Windows::Forms::Button();
			this->button5 = new System::Windows::Forms::Button();
			this->button6 = new System::Windows::Forms::Button();
			this->listBox1 = new System::Windows::Forms::ListBox();
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(500, 32);
			this->button1->Name = S"button1";
			this->button1->Size = System::Drawing::Size(112, 23);
			this->button1->TabIndex = 1;
			this->button1->Text = S"Read Text File";
			this->button1->Click += new System::EventHandler(this, button1_Click);
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(500, 64);
			this->button2->Name = S"button2";
			this->button2->Size = System::Drawing::Size(112, 23);
			this->button2->TabIndex = 2;
			this->button2->Text = S"Write Text File";
			this->button2->Click += new System::EventHandler(this, button2_Click);
			// 
			// button3
			// 
			this->button3->Location = System::Drawing::Point(500, 96);
			this->button3->Name = S"button3";
			this->button3->Size = System::Drawing::Size(112, 23);
			this->button3->TabIndex = 3;
			this->button3->Text = S"View File Information";
			this->button3->Click += new System::EventHandler(this, button3_Click);
			// 
			// button4
			// 
			this->button4->Location = System::Drawing::Point(500, 128);
			this->button4->Name = S"button4";
			this->button4->Size = System::Drawing::Size(112, 23);
			this->button4->TabIndex = 4;
			this->button4->Text = S"List Drives";
			this->button4->Click += new System::EventHandler(this, button4_Click);
			// 
			// button5
			// 
			this->button5->Location = System::Drawing::Point(500, 160);
			this->button5->Name = S"button5";
			this->button5->Size = System::Drawing::Size(112, 23);
			this->button5->TabIndex = 5;
			this->button5->Text = S"List Subfolders";
			this->button5->Click += new System::EventHandler(this, button5_Click);
			// 
			// button6
			// 
			this->button6->Location = System::Drawing::Point(500, 188);
			this->button6->Name = S"button6";
			this->button6->Size = System::Drawing::Size(112, 23);
			this->button6->TabIndex = 6;
			this->button6->Text = S"List Files";
			this->button6->Click += new System::EventHandler(this, button6_Click);
			// 
			// listBox1
			// 
			this->listBox1->Location = System::Drawing::Point(24, 24);
			this->listBox1->Name = S"listBox1";
			this->listBox1->Size = System::Drawing::Size(450, 199);
			this->listBox1->TabIndex = 0;
			// 
			// Form1
			// 
			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
			this->ClientSize = System::Drawing::Size(692, 293);
			this->Controls->Add(this->listBox1);
			this->Controls->Add(this->button6);
			this->Controls->Add(this->button5);
			this->Controls->Add(this->button4);
			this->Controls->Add(this->button3);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Name = S"Form1";
			this->Text = S"Form1";
			this->ResumeLayout(false);

		}	
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {// This code shows how to read a text file.
// The try...catch code is to deal with a 0 byte file or a non-existant file.
listBox1->Items->Clear();

				try   
				{    
					String* textFile = String::Concat(windir, (S"\\mytest.txt")); 
					StreamReader *reader=new  StreamReader(textFile);
					do
					{
					listBox1->Items->Add(reader->ReadLine());
					}   
					while(reader->Peek() != -1);
				} 
				catch(FileNotFoundException *ex)
				{
					listBox1->Items->Add(ex);
				}	     
				        
				catch (System::Exception *e)
				{ 
					listBox1->Items->Add(e);
				}
			 }

private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code demonstrates how to create and to write to a text file.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"The file was written to C:\\KBTest.txt");
listBox1->Items->Add(filew);
		 }

private: System::Void button3_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code retrieves file properties. This example uses Notepad.exe.
listBox1->Items->Clear();
String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
FileInfo *pFileProps  =new FileInfo(testfile);

listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
		 }

private: System::Void button4_Click(System::Object *  sender, System::EventArgs *  e)
		 {// The code demonstrates how to obtain a list of disk drives.
listBox1->Items->Clear();
String* drives[] = Directory::GetLogicalDrives();
int numDrives = drives->get_Length();
for (int i=0; i<numDrives; i++)
{
	listBox1->Items->Add(drives[i]);
}
		 }

private: System::Void button5_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code obtains a list of folders. This example uses the Windows folder.
listBox1->Items->Clear();
String* dirs[] = Directory::GetDirectories(windir);
int numDirs = dirs->get_Length();
for (int i=0; i<numDirs; i++)
{
	listBox1->Items->Add(dirs[i]);                                                    
}
		 }

private: System::Void button6_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code obtains a list of files. This example uses the Windows folder.
listBox1->Items->Clear();
String* files[]= Directory::GetFiles(this->windir);
int numFiles = files->get_Length();
for (int i=0; i<numFiles; i++)
{
	listBox1->Items->Add(files[i]);
}
		 }

};
}

//Form1.cpp
#include "stdafx.h"
#include "Form1.h"
#include <windows.h>

using namespace KB307398;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
	Application::Run(new Form1());
	return 0;
}

Referências

Para mais informações, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/default.aspx?xmlid=FH;EN-US; vcnet
Para mais informações sobre como criar formulários do Windows no geridos Extensões para C++, consulte o exemplo de "ManagedCWinFormWiz" no Visual Studio .NET Obter ajuda.

Propriedades

Artigo: 307398 - Última revisão: 28 de junho de 2013 - Revisão: 5.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Palavras-chave: 
kbwindowsforms kbforms kbio kbfileio kbhowtomaster kbnewsgrouplink kbmt KB307398 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 307398

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com