Как подключить текстовый файл к проекту c
Перейти к содержимому

Как подключить текстовый файл к проекту c

  • автор:

Visual Studio: как добавить текстовый файл в C#-проект и отобразить его в древе проекта?

Во всех примерах по работе с текстовыми файлами (расширение .txt ) на языке C#, которые я видел, текстовый файл предлагалось сохранять вне проекта. Но я хочу, чтобы текстовый файл хранился внутри решения (например, в подпапке Data ). Visual Studio в меню добавления нового файла предлагает добавлять только определённые типы файлов, среди которых нет текстовых. Таким образом, насколько я на данный момент знаю, текстовый файл можно добавить в проект только с помощью проводника Windows (или сторонних аналогов). Если это сделать, то хотя тест на наличие файла (код ниже) и даст положительный результат, файл не будет отображаться в древе проекта.

Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist."); 

Отслеживать

user177221

задан 6 окт 2017 в 2:17

Боков Глеб Боков Глеб

1,106 2 2 золотых знака 25 25 серебряных знаков 69 69 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Visual Studio в меню добавления нового файла предлагает добавлять только определённые типы файлов, среди которых нет текстовых.

введите сюда описание изображения

Разве? В окне добавления новго элемента выберите раздел «Общие» и Вы увидите в числе прочих «Текстовый файл». Если файл создан вне студии, в конктекстном меню проекта есть пункт «Добавить»-> «Существующий элемент». Он откроет стандартный диалог Windows для открытия файлов. Выбираете в правом нижнем углу «Все файлы» и можете добавить в проект какой угодно файл. В том числе текстовый.

#13 – Работа с файлами при помощи C++

#13 – Работа с файлами при помощи C++

За счет C++ вы можете работать с текстовыми файлами. За урок вы научитесь записывать данные в файлы, а также считывать текстовые данные из них.

Видеоурок

Многие языки программирования предоставляют классы для работы с файлами и директориями проекта. Язык C++ обладает множеством классов для записи и чтения данных из файлов.

Работа с файлами

При работе с файлами всегда необходимо помнить две вещи:

  1. Перед началом работы с файлом его необходимо открыть;
  2. После завершения работы с файлом его необходимо закрыть.

Если файл не открыт или же неверно открыт, то вы не можете полноценно работать с его содержимым.

С закрытием все проще, но и коварнее. Если вы не закроете файл, то программа будет работать верно, тем не менее, чем больше будет открытых файлов, тем больше программа будет перегружена и в какой-то момент она просто зависнет или выключиться.

Исключения и файлы

Поскольку не всегда известно будет ли файл в проекте или на компьютере пользователя, то всегда лучше открывать файлы за счёт использования исключений. Выполняйте открытие файлов в блоке try catch и тем самым вы обезопасите себя от любых непредвиденных обстоятельств.

Об этом мы еще поговорим в следующих уроках.

Запись данных в файл

При записи данных в файл его изначально необходимо открыть. Для этого в языке C++ используется класс ofstream :

// Создание/открытие файла "examples.txt" ofstream itproger_file("examples.txt"); // Можно было использовать метод open // ofstream itproger_file; // itproger_file.open("examples.txt"); // но первая запись короче, поэтому стоит использовать её if (itproger_file.is_open()) < // Проверяем открыт ли файл itproger_file else // Если файл не удалось открыть, тогда выдаем ошибку cout 

Таким образом мы можем открыть файл и поместить в него любую информацию.

При открытии файла можно указать режим открытия. Существуют несколько режимов и все они представлены на фото ниже:

Режим необходимо прописывать в качестве второго параметра при открытии файла:

#include #include using namespace std; int main() < // Открываем файл для записи в него текста ofstream file("test.txt", ios_base::out); if (file.is_open()) < // Проверяем открыт ли сам файл file cin.get(); return 0; >
Чтение данных из файла

Для чтения данных файл необходимо также изначально открыть и в конце закрыть. Чтобы прочесть содержимое файла используется класс ifstream :

#include #include using namespace std; int main() < // здесь будет храниться промежуточный текст, // который мы будем считывать из файла char temp[100]; ifstream some_file("test.txt"); // открываем файл для чтения // считываем лишь первое слово и помещаем в переменную temp some_file >> temp; cout 
Весь код будет доступен после подписки на проект!

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Выполнение базового файлового ввода-вывода в Visual C++

В этой статье описывается выполнение основных операций ввода-вывода файлов в Microsoft Visual C++ или Visual C++ .NET.

Исходная версия продукта: Visual C++
Исходный номер базы знаний: 307398

Аннотация

Если вы не знакомы с платформа .NET Framework, вы обнаружите, что объектная модель для операций с файлами в платформа .NET Framework похожа FileSystemObject на модель, которая пользуется популярностью у многих разработчиков Visual Studio.

  • Чтобы упростить переход, см . статью Использование FileSystemObject с Помощью Visual Basic.
  • Сведения о версии .NET для Visual C# этой статьи см. в статье Как выполнить базовый файловый ввод-вывод в Visual C#.

В этой статье рассматриваются следующие платформа .NET Framework пространства имен библиотек классов:

  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing

Вы по-прежнему FileSystemObject можете использовать в платформа .NET Framework. FileSystemObject Так как является компонентом COM, платформа .NET Framework требует, чтобы доступ к объекту проходил через слой взаимодействия. Если вы хотите его использовать, платформа .NET Framework создает оболочку для компонента. File Однако класс, FileInfo класс , Directory DirectoryInfo классы и другие связанные классы в платформа .NET Framework предоставляют функциональные возможности, недоступные в FileSystemObject , без накладных расходов на уровень взаимодействия.

Демонстрация операций ввода-вывода файлов

В примерах в этой статье описываются основные операции ввода-вывода файлов. В разделе Пошаговый пример описывается создание примера программы, демонстрирующей следующие шесть операций ввода-вывода файлов:

  • Чтение текстового файла
  • Запись текстового файла
  • Просмотр сведений о файлах
  • Вывод списка дисков
  • Вывод списка вложенных папок
  • Вывод списка файлов

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

В следующем примере кода класс используется 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); > 

В Visual C++ необходимо добавить параметр компилятора поддержки среды CLR (/clr:oldSyntax), чтобы успешно скомпилировать предыдущий пример кода как управляемый C++. Чтобы добавить параметр компилятора поддержки среды CLR, выполните следующие действия.

Примечание. — это заполнитель для имени проекта.

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

Этот пример кода использует класс для 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())); 

Вывод списка дисков

В этом примере кода классы и Drive используются Directory для вывода списка логических дисков в системе. В этом примере результаты отображаются в элементе управления ListBox.

listBox1->Items->Clear(); String* drives[] = Directory::GetLogicalDrives(); int numDrives = drives->get_Length(); for (int i=0; iItems->Add(drives[i]); > 

Вывод списка вложенных папок

Этот пример кода использует GetDirectories метод класса для Directory получения списка папок.

listBox1->Items->Clear(); String* dirs[] = Directory::GetDirectories(windir); int numDirs = dirs->get_Length(); for (int i=0; iItems->Add(dirs[i]); > 

Вывод списка файлов

В этом примере кода метод класса используется GetFiles Directory для получения списка файлов.

listBox1->Items->Clear(); String* files[]= Directory::GetFiles(this->windir); int numFiles = files->get_Length(); for (int i=0; iItems->Add(files[i]); > 

Многие вещи могут пойти не так, когда пользователь получает доступ к файлам. Файлы могут не существовать, файлы могут использоваться или пользователи могут не иметь прав на файлы папок, к которым они пытаются получить доступ. Учитывайте эти возможности при написании кода для обработки исключений, которые могут быть созданы.

Пошаговый пример

  1. Запустите Visual Studio .NET.
  2. В меню Файл выберите пункт Создать и затем пункт Проект.
  3. В разделе Типы проектов щелкните Проекты Visual C++. В разделе Шаблоны щелкните Windows Forms приложение (.NET).
  4. Введите KB307398 в поле Имя , введите C:\ в поле Расположение и нажмите кнопку ОК.
  5. Откройте форму Form1 в режиме конструктора и нажмите клавишу F4, чтобы открыть окно Свойства .
  6. В окне Свойства разверните папку Размер . В поле Ширина введите 700. В поле Высота введите 320.
  7. Добавьте один элемент управления ListBox и шесть элементов управления Button в Form1.

Примечание. Чтобы просмотреть панель элементов, щелкните Панель элементов в меню Вид .

Идентификатор правила Расположение Имя Size TabIndex Текст
button1 500, 32 button1 112, 23 1 Чтение текстового файла
button2 500, 64 button2 112, 23 2 Запись текстового файла
button3 500, 96 button3 112, 23 3 Просмотр сведений о файлах
button4 500, 128 button4 112, 23 4 Создание списка ресурсов Drive
button5 500, 160 button5 112, 23 5 Список вложенных папок
button6 500, 192 button6 112, 23 6 Список файлов
listBox1 24, 24 listBox1 450, 200 0 listBox1
private: String *windir; 
windir = System::Environment::GetEnvironmentVariable("windir"); 
// 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); > 
// 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); 
// 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())); 
// 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; iItems->Add(drives[i]); > 
// 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; iItems->Add(dirs[i]); > 
// 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; iItems->Add(files[i]); > 

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

//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 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. /// 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: /// /// Required designer variable. /// System::ComponentModel::Container * components; /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// 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; iItems->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; iItems->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; iItems->Add(files[i]); > > >; > //Form1.cpp #include "stdafx.h" #include "Form1.h" #include 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; > 

Ссылки

Дополнительные сведения см. в разделе служба поддержки Майкрософт. Дополнительные сведения о создании Форм Windows Forms в управляемых расширениях для C++ см. в примере справки ManagedCWinFormWiz visual Studio .NET.

Visual Studio. Как добавить .txt файл?

Задача:
Есть проект, в него надо добавить текстовый файл(Readme.txt) и, соответственно, заполнить его. Что-то не могу догнать, можно ли это сделать средствами такого распиаренного Visual Studio(до этого сидел на Rider, там это делается в 2 клика - ПКМ->добавить файл).

  • Вопрос задан более трёх лет назад
  • 9810 просмотров

Комментировать

Решения вопроса 1

Rem_u

Эх, как же хочется худенькую, бледную, не очень.

ПКМ пр проекту - добавить - создать элемент - текстовый файл. он будет лежать в C:\Users\User\source\repos\WindowsFormsApp1\WindowsFormsApp1 где и папка bin (это всё по стандарту) полный путь, содержание, настройка отношения файла к процессам сборки и внедрения, имя файла и ещё 2 пункта можно изменить в самом Visual Studio.

Ответ написан более трёх лет назад

Комментировать

Нравится Комментировать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *