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

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

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

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

17.06.2010, 21:09. Просмотров 27147. Ответов 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++
В радиоателье хранятся квитанции о сданных в ремонт телевизорах. Каждая квитанция содержит марку телевизора, дату приемки в ремонт,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.06.2010, 14:39     [C++] Работа с файлами #31
Цитата Сообщение от Egeni Посмотреть сообщение
Что делать?
Для начала определить - где?.
rrrFer
Заблокирован
18.06.2010, 14:45     [C++] Работа с файлами #32
Что делать?
отлаживать по шагам
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 16:32  [ТС]     [C++] Работа с файлами #33
Я не сталкивался до этого с отлаживаниями программ, видимо это время наступило...

Значит все происходит как...
я запускаю программу:
она ищет файлы ищет, ищет в консоли мелькает все...
потом создается файл booklist.txt - 0 КБ
и выскакивает ошибка
Код
Инструкция по адресу "0x7c901010" обратилась к памяти по адресу "0x00000034". Память не может быть "read"
Нажимаю ОК - Закрывается программа обновляю папку Файл буклист становится равным 21КБ
Нажимаю Отмена вызывается отладчик и тыкает меня в строку с адресом

Код
7C901010 cmp dword ptr [edx+14h],0
Вложения
Тип файла: rar find_txt.rar (1.5 Кб, 23 просмотров)
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.06.2010, 19:41     [C++] Работа с файлами #34
Egeni, а после записи файл кто закрывать будет?
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
19.06.2010, 00:45  [ТС]     [C++] Работа с файлами #35
Согласен... я не закрывал файлов а оно видимо их понаоткрывало кучу

Добавлено через 3 часа 5 минут
А как удалить из файла по несколько строк начинающихся с символов /* и заканчивающихся первым */ то есть удалить коментарии?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
19.06.2010, 07:48     [C++] Работа с файлами #36
Ну этот вопрос можно рекомендовать в качестве задачки тык скыть.

И сразу же: если надумаешь решать, удаляй также комменатрии вида //
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
19.06.2010, 18:03  [ТС]     [C++] Работа с файлами #37
Для использования парсинга в С++ применяются библиотеки boost++ и Qt но они утяжеляют код, как можно обойтись проще без этих библиотек:? самостоятельно:?

Я видел создавались похожие темы про парсинг HTML тегов, но без результатно, ответов в них нет, неужели никто не задумывался?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
19.06.2010, 20:23     [C++] Работа с файлами #38
Удаление комментариев в файле
Экзамен по С
Вот тут посмотри, может что полезное найдешь.
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
21.06.2010, 01:34  [ТС]     [C++] Работа с файлами #39
http://www.pcre.org
зашел, скачал ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ и сразу возник такой вопрос зачем все так усложнять, я посидел и ужаснулся, что мне с этим всем делать и как это добро можно использовать?

в этой библиотеке не нашел сам файл pcre.h который надо использовать. как установить или переписать библиотеку под себя??

Добавлено через 42 минуты
/------------------------------------------------/
вот нашел упрощенную функцию замены символа на си

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
char *char_replace(char const *str,char before,char after){
size_t len=strlen(str)+1;
char *ret=malloc(len), *ptr=ret;
memcpy(ret,str,len);
while((ptr=strchr(ptr,before))!=0)
*ptr++=after;
return ret;}
 
 
int main(){
char const *str="Hello world!";
char *neww=char_replace(str,'l','L');
printf("%s\n",neww);
free(neww);
return 0;}
Код
char *ret=malloc(len), *ptr=ret;
но вызывает ошибку
Cannot convert 'void *' to 'char *'

Добавлено через 53 минуты
--------------------------------------
вот еще задача функция замены всех вхождений подстроки в строке. функция имеет три аргумента: искомая строка, заменяемая стока и текст с котором необходимо выполнить данные действие
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
char* StrReplace (char* Search, char* Replace, char* Resource)
{
int SearchLen = strlen (Search);
int ReplaceLen = strlen (Search);
 
char* Pointer = strstr (Resource, Search);
 
while (Pointer != NULL)
{
int PointerLen = strlen (Pointer);
int ResourceLen = strlen (Resource);
 
char* NewText = (char*)calloc((ResourceLen - SearchLen + ResourceLen), sizeof(char));
 
strncpy (NewText, Resource, ResourceLen - PointerLen);
strcat (NewText, Replace);
strcat (NewText, Pointer + SearchLen);
 
Resource = (char*)realloc(Resource, (ResourceLen - SearchLen + ReplaceLen)*sizeof(char));
 
for (int i = 0; i < (ResourceLen - SearchLen + ReplaceLen); i++)
{
Resource[i] = NewText[i];
}
 
free (NewText);
 
Pointer = strstr (Resource, Search);
}
 
return Resource;
}
ошибка undefinded reference 'WinMain@16'
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
21.06.2010, 09:57     [C++] Работа с файлами #40
Я уже забыл о чём шла речь вообще, поэтому дам точечные советы.
По последней ошибке, скорее всего компилятор ищет функцию а-ля main и не может её найти

Надо прописать где-нибудь в коде

По невозможности ковертировать один тип в другой.
Удивляться не приходится ведь malloc возвращает переменную типа void*, и это значение присваивается переменной типа char*

Несоответсвие
Ну, это часто я с таким сталкивался. Так единого рецепта решения проблемы не выработал. Эксперементируй с преобразованием типов. Можешь, ret объявить как void*, посмотри, что получится...
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.06.2010, 10:12     [C++] Работа с файлами #41
Цитата Сообщение от Egeni Посмотреть сообщение
но вызывает ошибку
Cannot convert 'void *' to 'char *'
C
1
char *ret=malloc(len), *ptr=ret;
=>
C
1
char *ret=(char *)malloc(len), *ptr=ret;
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
21.06.2010, 20:35  [ТС]     [C++] Работа с файлами #42
Хотел написать программу удаления коментариев в С++ исходных файлах.
построчных // коментарий
многострочных /* коментарий */

у меня тоже возник вопрос какие есть функции для работы со строками?
как вообще лучше работать с файлом какие типы (char я так понимаю) при этом используются?

я впринципе представляю себе алгоритм:

1.открыть файл
в аргументах для функции передавать
1-имя файла, 2-строку которую изменить (// и /*), 3-строку на что изменить(если пусто тоесть удалить)

2.прочитать его в переменную
(как лучше читать по строчно или нет? если большой файл то как быть?)

3.найти в файле совпадения
функция поиска по файлу при нахождении 2строки (// и /*) искать конец (endline или */) и возвращать номера символов первого найденного и последнего (/* */) и после удалить их
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.06.2010, 23:05     [C++] Работа с файлами #43
Файл лучше обрабатывать посимвольно
Evg же довольно подробно описал алгоритм Удаление комментариев в файле

Добавлено через 1 час 29 минут
На ночь глядя мой воспаленный мозг родил такой код Он не безупречен.
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
#include <iostream.h>
#include <fstream.h>
 
int main(int argc, char* argv[])
{
   int buf1 = 0, buf2 = 0;
   int f_c = 0, f_cplus = 0, f_com;
   ifstream file_in;
   ofstream file_out;
 
   file_in.open("d:\\progexp\\com.cpp");
   if (!file_in.is_open())
   {
      cerr << "Can not open input file" << endl;
      system("pause");
      return 1;
   }
   file_out.open("d:\\progexp\\nocom.cpp");
   if (!file_out.is_open())
   {
      cerr << "Can not open output file" << endl;
      system("pause");
      return 1;
   }
 
   while ((buf1 = file_in.get()) != EOF)
   {
      if (buf1 == '/' && f_c == f_cplus)
      {
         f_com = 1;
      }
      if (buf2 == '/' && buf1 != '/' && buf1 != '*' && f_c == f_cplus)
      {
         f_com = 0;
         file_out.put(buf2);
      }
      if (buf1 == '/' && buf2 == '/' && f_c != 1)
         f_cplus = 1;
      if (buf1 == '*' && buf2 == '/' && f_cplus != 1)
         f_c = 1;
      if (buf1 == '\n' &&f_cplus == 1)
         f_cplus = f_com = 0;
      if (buf1 == '/' && buf2 == '*' && f_c == 1)
      {
         f_c = f_com = 0;
         continue;
      }
      if (!f_com)
         file_out.put(buf1);
      buf2 = buf1;
   }
   file_in.clear();
   file_out.close();
   return 0;
}
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
22.06.2010, 00:03  [ТС]     [C++] Работа с файлами #44
Хочешь разобраться в коде - попробуй его откоментируй. пробовал откоментировать до цепочки if условий дальше немного не понятно что в себе хранят переменные f_c, f_cplus, f_com

Цитата Сообщение от kazak Посмотреть сообщение
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
#include <iostream.h>
#include <fstream.h>
 
int main(int argc, char* argv[]){
   int buf1 = 0, buf2 = 0;
   int f_c = 0, f_cplus = 0, f_com;
   ifstream file_in;
   ofstream file_out;
   //Файл открытия
   file_in.open("com.cpp");
   //Если не получилось открыть файл
   if (!file_in.is_open())   {
      cerr << "Can not open input file" << endl;
      system("pause");
      return 1;   }
   //Файл вывода
   file_out.open("nocom.cpp");
   if (!file_out.is_open())   {
      cerr << "Can not open output file" << endl;
      system("pause");
      return 1;   }
      /*Условие проверки
      * записываем в buf1 входящий файл
      */
   while ((buf1 = file_in.get()) != EOF)   {
      //Если buf1 равен "/" и f_c равен f_cplus, то f_com равняется 1
      if (buf1 == '/' && f_c == f_cplus)      {
         f_com = 1;
      }
      //Если buf2 = "/" и buf1 не "/" и buf1 не "*" и  f_c = f_cplus
      if (buf2 == '/' && buf1 != '/' && buf1 != '*' && f_c == f_cplus)       {
         f_com = 0;
         file_out.put(buf2);
      }
      if (buf1 == '/' && buf2 == '/' && f_c != 1)
         f_cplus = 1;
      if (buf1 == '*' && buf2 == '/' && f_cplus != 1)
         f_c = 1;
      if (buf1 == '\n' &&f_cplus == 1)
         f_cplus = f_com = 0;
      if (buf1 == '/' && buf2 == '*' && f_c == 1)
      {
         f_c = f_com = 0;
         continue;
      }
      if (!f_com)
         file_out.put(buf1);
      buf2 = buf1;
   }
   file_in.clear();
   file_out.close();
   return 0;
}
непонятно с какими аргументами можно работать, тоесть что передается аргументами??
а так впринципе код работает на отлично, но оставляет дыры на многострочных коментариях в файле nocom.cpp
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2010, 00:08     [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++
Доброго времени суток. Написал программу с выводом в файл, но она выводит совсем левое число, скажите где тут косяк? Сильно не материте я в...


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

Или воспользуйтесь поиском по форуму:
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
22.06.2010, 00:08     [C++] Работа с файлами #45
f_c, f_cplus, f_com это флаги
f_com - флаг комментария
f_c - флак комментария в стиле Си
f_cplus - флаг комментария в стиле С++
Yandex
Объявления
22.06.2010, 00:08     [C++] Работа с файлами
Ответ Создать тему
Опции темы

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