Как сделать основной файл ввода-вывода в Visual C++ или Visual C++ .NET

Переводы статьи Переводы статьи
Код статьи: 307398 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft Visual C++ .NET 2005/2008 c ECMA + +/ CLI версии этой статьи см. 950617.
Для этой версии Microsoft Visual C# .NET в статье, см. 304430.
Для Microsoft Visual Базовая версия .NET данной статьи, см. 304427.
В данной статье относится к следующие пространства имен библиотеки классов Microsoft платформа.NET Framework:
  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается, как сделать шесть basic файловой операции ввода вывода (I/O) в Microsoft Visual C++ 2005 или Microsoft Visual C++ .NET. Если вы не знакомы с платформа.NET Framework, Вы обнаружите, что объектная модель для операций с файлами в платформа.NET Framework аналогична FileSystemObject (FSO), популярны среди многих разработчиков Microsoft Visual Studio 6.0. Для проще, перехода, представленный в этой функции статья основана на следующей статье Microsoft Knowledge Base:
186118 Как использовать FileSystemObject с Visual Basic
По-прежнему можно использовать FileSystemObject в платформа.NET Framework. Поскольку FileSystemObject является компонентом модели компонентных объектов (COM), платформа.NET Framework требует доступ к объекту быть через уровень взаимодействия. Платформа.NET Framework создает оболочку для компонент, для вас, если вы хотите использовать его. Тем не менее файл класса, класс FileInfo , каталог, классы DirectoryInfo и другие классы в платформа.NET Framework, предоставляют функциональные возможности, недоступные с FSO, одновременно снижая издержки Уровень взаимодействия.

Требования

В следующем списке представлены рекомендуемого оборудования, программного обеспечения, сетевой инфраструктуры и пакетов обновления, которые необходимы:
  • Visual C++ 2005 и Visual C++ .NET

Продемонстрированный операций ввода-вывода

Примеры в этой статье описываются основные файловых операций ввода-вывода. В разделе «Пример Step-by-Step» описывается создание примера программы показаны следующие шесть операций ввода-вывода:
  • Чтение текстового файла
  • Запись в текстовый файл
  • Просмотр информации в файле
  • Список дисков
  • Список папок
  • Список файлов

Чтение текстового файла

В следующем примере кода используется класс StreamReader для чтения текстового файла. Содержимое файла добавлен элемент управления ListBox . Блок try... catch используется для предупреждения программы, если он пуст. Существует множество способов определить, когда достигнут конец файла; в этом примере использует метод Peek для проверки на следующую строку перед его чтением.
  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);
	}

}
				
Примечание Необходимо добавить общей поддержки компилятора параметр среды CLR (/clr:oldsyntax/CLR: oldSyntax) для успешной компиляции фрагменте кода управляемого C++ в Visual C++ 2005. Чтобы добавить параметр компилятора поддержки общего языка во время выполнения, выполните следующие действия.
  1. Нажмите кнопку Проект, а затем нажмите кнопкуИмя_проекта Свойства.

    ПримечаниеИмя_проекта — Это имя проекта.
  2. Разверните узел Свойства конфигурации, а затем нажмите кнопкуОбщие.
  3. В области справа выберите вариант Поддержка Common Language Runtime, старый синтаксис (/ CLR: oldSyntax) вПоддержка среды CLR Параметры проекта.
  4. Нажмите кнопкуПрименить, а затем нажмите кнопку ОК.
Дополнительные сведения о вариантах поддержки компилятора общий язык среды выполнения посетите следующий веб-узел Microsoft Developer Network (MSDN):
http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx

Запись в текстовый файл

Этот пример кода использует класс StreamWriter для создания и записи в файл. Если имеется существующий файл можно открыть его таким же образом.
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);
				

Просмотр информации в файле

Этот пример кода использует класс FileInfo для доступа к свойствам файлов. Notepad.exe, используемый в данном Пример. Свойства отображаются в элементе управления ListBox .
 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()) );
				

Список дисков

Этот пример кода использует классы каталог и диск для получения списка логических дисков в системе. Для этого образца результаты отображаются в элементе управления ListBox .
  listBox1->Items->Clear();
  String* drives[] = Directory::GetLogicalDrives();
  int numDrives = drives->get_Length();
  for (int i=0; i<numDrives; i++)
  {
	listBox1->Items->Add(drives[i]);
  } 
				

Список подпапок

Этот пример кода использует метод GetDirectories класса Directory для получения списка папок.
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]);
}
				

Список файлов

Этот пример кода использует метод класса DirectoryGetFiles для получения списка файлов.
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]);
}
				
Многое может пойти не так, когда пользователь получает доступ к файлам. Файлы не существует, файл может быть занят или пользователи могут не иметь права файлы папки, которые нужно получить доступ. Рассмотрим Эти возможности при написании кода обработки исключений, которые могут создан.

Пример с пошаговыми инструкциями

  1. Запустите Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 или Microsoft Visual C++ 2005 Express Edition.
  2. На Файл Выберите пунктНовый, а затем нажмите кнопку Проект.
  3. В группе Типы проектов, нажмите кнопкуПроекты Visual C++.. В группе Шаблоны ЩелкнитеПриложение Windows Forms (.NET).

    Примечание В Visual Studio 2005 нажмите кнопкуVisual C++ в группе Типы проектов. В группе Шаблоны, нажмите кнопкуПриложение Windows Forms.
  4. Введите KB307398 вИмя поле типа C:\ вРасположение поле, а затем нажмитеОК.
  5. Откройте форму Form1 в режиме конструктора Просмотр и нажмите клавишу F4, чтобы открыть Propertries окно.
  6. В окне «Свойства» разверните узел Sizeпапка. В Ширина поле типа 700. В Высота поле типа320.
  7. Добавить ListBox элемент управления и шестьКнопка элементы управления в форму Form1.

    Примечание Для просмотра панели инструментов нажмите кнопку Панели инструментов на Представление меню.
  8. В окне свойств изменитеРасположение, Имя, Size,TabIndexи Текст Эти свойства Определяет, как показано ниже:
    Свернуть эту таблицуРазвернуть эту таблицу
    Идентификатор элемента управленияРасположениеИмяSizeTabIndexТекст
    Button1500, 32Button1112, 231Чтение текстового файла
    Button2500, 64Button2112, 232Запись в текстовый файл
    Button3500, 96Button3112, 233Просмотр информации в файле
    Button4500, 128Button4112, 234Список дисков
    Button5500, 160Button5112, 235Список подпапок
    button6500, 192button6112, 236Список файлов
    listBox124, 24listBox1450 2000listBox1
  9. Откройте файл Form1.h. В объявлении класса Form1 Объявите одной закрытой переменной строки с помощью следующего кода:
    private:
    		String *windir;
  10. В конструкторе класса Form1 добавьте следующий код:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Для выполнения операций ввода вывода файлов, добавление System::IO пространство имен.
  12. Нажмите клавиши SHIFT + F7, чтобы открыть форму Form1 в Режим конструктора. Дважды щелкните кнопку Чтение текстового файла , а затем вставьте следующий код:

    Примечание В Visual C++ 2005 нажмите кнопку Конструктор в Представление меню.
    // 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. В конструкторе Form1 дважды щелкните кнопку Записать текстовый файл и вставьте следующий код:
    // 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. В режиме конструктора Form1 дважды щелкните кнопку Просмотр информации в файле и вставьте следующий код в метод:
    // 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. В режиме конструктора Form1 дважды щелкните кнопку Список дисков и вставьте следующий код:
    // 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. В режиме конструктора Form1 дважды щелкните кнопку Список вложенных папок и затем вставьте следующий код:
    // 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. В конструкторе Form1 дважды щелкните кнопку Список файлов и вставьте следующий код:
    // 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. Построение и запустите программу, нажмите клавиши CTRL + F5.

Полный пример кода

Примечание При работе в 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;
}

Ссылки

Дополнительные сведения см. на веб-узле корпорации Майкрософт по адресу:
http://support.Microsoft.com/default.aspx?xmlid=fh;EN-US; vcnet
Дополнительные сведения о создании форм Windows forms в управляемый код Пример «ManagedCWinFormWiz» в Visual Studio .NET расширения для C++, см. В справочной системе.

Свойства

Код статьи: 307398 - Последний отзыв: 28 июня 2013 г. - Revision: 5.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Ключевые слова: 
kbwindowsforms kbforms kbio kbfileio kbhowtomaster kbnewsgrouplink kbmt KB307398 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.
Эта статья на английском языке: 307398

Отправить отзыв

 

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