Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 219, средняя оценка - 4.68
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
#1

[C++] Работа с файлами - C++

17.06.2010, 21:09. Просмотров 27145. Ответов 74
Метки нет (Все метки)

Задача: Есть файлы, которые надо обработать:
1.просканировать директории на наличие файлов расширения *.TXT
2.сохранять список путей к файлам в booklist.txt (для дальнейшей работы)
3.вывести booklist.txt на экран

Добавлено через 41 минуту
пытался найти похожие или хоть какие-то программы работы с файлами нашел вот эту

работает с файлами через аргумент и выводит дважды содержание файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Заголовочные файлы для ввода-вывода
#include <iostream>
#include <fstream>
 
void printFileTwice (const char* filename)
{
    // Открытие файла
    std::ifstream file(filename);
 
    // Первый вывод содержимого
    std::cout << file.rdbuf();
 
    // Возврат к началу файла
    file.seekg(0);
 
    // Второй вывод содержимого
    std::cout << file.rdbuf();
}
 
int main (int argc, char* argv[])
{
    // Двукратный вывод всех файлов, переданных в командной строке
    for (int i=1; i<argc; ++i) {
        printFileTwice(argv[i]);
    }
}
Добавлено через 16 минут
------------------------------------

Посоветуйте что можно сделать, я в С++ только начал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2010, 21:09     [C++] Работа с файлами
Посмотрите здесь:

работа с файлами в С/C++ - C++
Привет! Нужна помощь специалиста) Подскажите, пожалуйста, как из файла filename.txt, в котором содержится матрица из 1000 на 5, записать...

Работа с файлами - C++
Проблема с связыванием программы с файлом Нужно, чтобы данные считывались из файла, а не вводились Не совсем понимаю #include...

работа с файлами - C++
Дан текстовый файл и строка s. Если самая длинная строка файла не совпадает со строкой s, то строку s дописать в конец файла. Помогите...

Работа с файлами - C++
Даны сведения о результатах сессии: ФИО студента, названия четырех предметов и оценки, полученные по каждому предмету. Вывести фамилии...

работа с файлами - C++
пишу прогу по файлам на С++, мне нужно использовать ф-ию которая сбрасывает указакеть на начало потока. В Си есть ф-ия rewind, есть ли...

C++ работа с файлами - C++
Задача с чтением и записью данных из файла в файл. Созданы 2 файла, в первом есть данные, во втором пусто. Написать программу, которая...

Работа с файлами - C++
В радиоателье хранятся квитанции о сданных в ремонт телевизорах. Каждая квитанция содержит марку телевизора, дату приемки в ремонт,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Artishok
17.06.2010, 21:12
  #2

Не по теме:

ну обычно изучают Си или другой язык как минимум семестр

Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 21:27  [ТС]     [C++] Работа с файлами #3
ну хотя бы посоветуйте что для этого можно использовать какие функции?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.06.2010, 22:02     [C++] Работа с файлами #4
1.просканировать директории на наличие файлов расширения *.TXT
По этому вопросу есть не много инфы:
Работа с каталогами
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 22:12  [ТС]     [C++] Работа с файлами #5
спасибо, уже хоть чтото
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include "windows.h"
#include "iostream"
#include "string"
 
using namespace std;
 
void main()
{
 
string Path = "C:\\";       //для пути файла.
 
 
 
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
 
        hf=FindFirstFile("C:\\*.txt", &FindFileData);
 
    //Код расположенный ниже ищет все файлы с рашсширением .txt.
 
 
        if (hf!=INVALID_HANDLE_VALUE)
        {
                do
                {  
 
                Path  += FindFileData.cFileName;                        //создаеться полный путь сцеплением.
            cout << "Path file:  "<<Path.c_str()<<endl;             //выводим путь файла.
                cout << "Name file:  "<<FindFileData.cFileName<< endl;  //выводим имя файла.
/*путь файла можно использовать для отркрытия файла.   */               
                Path = "C:\\";   //сбрасываем путь.
 
                cout<<endl;
                }
 
                while (FindNextFile(hf,&FindFileData)!=0);
 
 
                FindClose(hf);
        }
 
 
 
system("pause");
}
а как просканировать вложенные директории? (вроде бы надо определить файл или папка)
и как вывести этот список в файл?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.06.2010, 22:40     [C++] Работа с файлами #6
а как просканировать вложенные директории?
Тогда скорее всего надо изобрести какой нибудь рекурсивный алгоритм обхода каталогов,
потому как если анализировать суть поиска: мы будем упираться в бесконечность, и
в возможность вернуться назад.
Толкового совета, дать не могу, потому как, не работал с этим, это только предположения.

и как вывести этот список в файл?
Это не трудно, на примере данном выше, могу это показать.

Добавлено через 8 минут
Egeni:
поповду обхода каталогов могу посоветовать набрать в гугол:
"рекурсивный обход каталогов FindFirstFile C++"
Вроде есть полезные ссылки.
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 22:54  [ТС]     [C++] Работа с файлами #7
вот нашел статью, но я незнаю, что мне из этого может быть полезно и как это можно использовать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
HANDLE FindFirstFile(LPCTSTR lpFileName, //имя файла(ов) который(е) ищем, можно
 использовать маску (*,?)
LPWIN32_FIND_DATA lpFindFileData //структура которая будет содержит информацию о файле);
 
Если произошла ошибка, то функция вернет значение INVALID_HANDLE_VALUE, иначе handle
поиска.
 
Структура WIN32_FIND_DATA содержит следующие элементы:
 
dwFileAttributes – атрибуты файла(директории):
 
FILE_ATTRIBUTE_ARCHIVE 0x00000020 файл или директория архивные
FILE_ATTRIBUTE_COMPRESSED 0x00000800 файл или директория сжаты
FILE_ATTRIBUTE_DIRECTORY 0x00000010 каталог
FILE_ATTRIBUTE_ENCRYPTED 0x00000040 файл или директория зашифрованы
FILE_ATTRIBUTE_HIDDEN 0x00000002 файл или директория скрыты
FILE_ATTRIBUTE_NORMAL 0x00000080 файл или директория без атрибутов
FILE_ATTRIBUTE_READONLY 0x00000001 только чтение
FILE_ATTRIBUTE_SYSTEM 0x00000004 файл или директория системные
FILE_ATTRIBUTE_TEMPORARY 0x00000100 файл или директория временные
 
ftCreationTime – время создания
ftLastAccessTime – время последнего открытия
ftLastWriteTime – время последнего изменения
nFileSizeLow – размер файла 
cFileName – имя файла
 
Для продолжения поиска необходима функция FindNextFile:
 
BOOL FindNextFile( HANDLE hFindFile, //handle поиска
LPWIN32_FIND_DATA lpFindFileData //указатель на структуру с информацией о файле);
 
Если нет ошибок функция возвращает не нулевое значение. Для нахождения текущей директории
можно воспользоваться функцией GetCurrentDirectory:
 
DWORD GetCurrentDirectory(DWORD nBufferLength, //размер буфера
LPTSTR lpBuffer //указатель на буфер );
 
Теперь сам код, используется Visual C++ 6.0, создаем Win32 Console Application.
 
#include <iostream.h>
#include <windows.h>
 
 
int main()
{
WIN32_FIND_DATA winFileData;
HANDLE hFile;
char szPath[MAX_PATH];
if(GetCurrentDirectory(sizeof(szPath),szPath))
{
cout<<szPath<<endl;
lstrcat(szPath,"\\*.*");
hFile = FindFirstFile(szPath,&winFileData);
if (hFile!=INVALID_HANDLE_VALUE)
{
do
{
cout<<winFileData.cFileName<<endl; 
}
while (FindNextFile(hFile,&winFileData)!=0);
FindClose(hFile);
}
}
return 0;
}
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
17.06.2010, 23:02     [C++] Работа с файлами #8
1.просканировать директории на наличие файлов расширения *.TXT
Если просканировать все каталоги,
то надо, искать алгоритм обхода дерева каталогов.
Если сканировать определенные каталоги, то тебе найденной тобой информации вполне достаточно.
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 23:14  [ТС]     [C++] Работа с файлами #9
как просканировать допустим все файлы в поддиректориях
если сама программа будет находится в library

чтобы в booklist.txt собралась информация вида
C:\library\readme.txt
C:\library\book\11234123.txt
C:\library\book\12343123.txt

Добавлено через 3 минуты
вот еще нашел

Как добавить один файл к другому
Код
Следующий пример добавлет один файл в конец другого. Приложение открывает два файла функцией CreateFile: ONE.TXT открывается для чтения, а TWO.TXT - для записи. Затем, содержимое ONE.TXT добавляется в конец TWO.TXT путём чтения и записи блоками по 4K при помощи функций ReadFile и WriteFile. Перед записью во второй файл, приложение устанавливает указатель в файле на конец функцией SetFilePointer и блокирует область, которая будет записана функцией LockFile. Тем самым другим процессам будет закрыт доступ во время записи. После каждой операции записи, функцией UnlockFile область разблокируется.
HANDLE hFile;
HANDLE hAppend;
DWORD dwBytesRead, dwBytesWritten, dwPos;
char buff[4096];

// Открываем существующий файл.

hFile = CreateFile("ONE.TXT", // открываем ONE.TXT
GENERIC_READ, // открываем на чтение
0, // не доступен для других
NULL, // нет security
OPEN_EXISTING, // только существующий файл
FILE_ATTRIBUTE_NORMAL, // нормальный файл
NULL); // нет шаблона аттрибутов

if (hFile == INVALID_HANDLE_VALUE)
{
ErrorHandler("Could not open ONE."); // обрабатываем ошибку
}

// Открываем существующий файл, либо если файл не существует,
// то создаём новый.

hAppend = CreateFile("TWO.TXT", // открываем TWO.TXT
GENERIC_WRITE, // открываем на запись
0, // не доступен для других
NULL, // нет security
OPEN_ALWAYS, // открыть или создать
FILE_ATTRIBUTE_NORMAL, // нормальный файл
NULL); // нет шаблона аттрибутов

if (hAppend == INVALID_HANDLE_VALUE)
{
ErrorHandler("Could not open TWO."); // обрабатываем ошибку
}

// Добавляем первый файл в конец второго.
// Блокируем второй файл во время записи в него, чтобы другие
// процессы в это время ничего не смогли сделать с файлом. Когда
// запись завершена, то разблокируем файл.

do
{
if (ReadFile(hFile, buff, 4096, &dwBytesRead, NULL))
{
dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
LockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
WriteFile(hAppend, buff, dwBytesRead,
&dwBytesWritten, NULL);
UnlockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
}
} while (dwBytesRead == 4096);

// Закрываем оба файла.

CloseHandle(hFile);
CloseHandle(hAppend);
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
17.06.2010, 23:44     [C++] Работа с файлами #10
Что-то вроде этого
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
#include <dir.h>
 
int main(void)
{
   struct ffblk file_info;
   int done;
   char dir[255];
   char mask[259];
   FILE *file_out;
 
   file_out = fopen("booklist.txt", "w");
   printf("Enter directory: ");
   gets(dir);
   strcpy(mask, dir);
   strcat(mask, "\\*.txt");
   printf("Directory listing of %s\n", mask);
   done = findfirst(mask, &file_info, 0);
   while (!done)
   {
      fprintf(file_out, "%s\\%s\n", dir, file_info.ff_name);
      done = findnext(&file_info);
   }
   getchar();
   return 0;
}
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 23:49  [ТС]     [C++] Работа с файлами #11
dir.h незнает таких, что входит в его состав?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
17.06.2010, 23:54     [C++] Работа с файлами #12
Цитата Сообщение от Egeni Посмотреть сообщение
dir.h незнает таких, что входит в его состав?
В него входят функции для работы с каталогами.
Grey
Тутошний я
1474 / 658 / 32
Регистрация: 03.11.2009
Сообщений: 1,746
18.06.2010, 00:08     [C++] Работа с файлами #13
Egeni, раз нада ,держи. И надеюсь понимаеш разницу между C++ и C++Builder.
1 Поиск файла
3
C++
1
Memo1->Lines->LoadFromFile("booklist.txt");
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 00:08  [ТС]     [C++] Работа с файлами #14
прочитал в инете dir.h в Visual C++ (которым я пользуюсь) нету, он есть в C++ Builder скачал я с него закинул но VС++ не хочет его понимать
Код
fatal error C1083: Cannot open include file: 'dir.h': No such file or directory
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2010, 00:23     [C++] Работа с файлами
Еще ссылки по теме:

Работа с файлами С++ - C++
Все работает , но проблема вот в чем: Считал все из файла file.txt записал в файл newfile.txt , но записал не правильно , где-то ошибка ,...

Работа с файлами - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { FILE *fp; ...

Работа с файлами - C++
ДОБРЫЙ ВЕЧЕР! Такая задачка.. Написать программу по созданию базы данных ( например: имя, фамилия, возраст). Программа создает эту...

работа с файлами - C++
подскажите как можно сохранить/считать с файла *.dat и чтобы этот файл не смогли прочесть(даже открыть) другие пользователи.

Работа с файлами C++ - C++
Доброго времени суток. Написал программу с выводом в файл, но она выводит совсем левое число, скажите где тут косяк? Сильно не материте я в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Grey
Тутошний я
1474 / 658 / 32
Регистрация: 03.11.2009
Сообщений: 1,746
18.06.2010, 00:23     [C++] Работа с файлами #15
Это на C++. Поиск файла
Yandex
Объявления
18.06.2010, 00:23     [C++] Работа с файлами
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru