1 | ||||||
[C++] Работа с файлами17.06.2010, 21:09. Показов 33246. Ответов 74
Метки нет (Все метки)
Задача: Есть файлы, которые надо обработать:
1.просканировать директории на наличие файлов расширения *.TXT 2.сохранять список путей к файлам в booklist.txt (для дальнейшей работы) 3.вывести booklist.txt на экран Добавлено через 41 минуту пытался найти похожие или хоть какие-то программы работы с файлами нашел вот эту работает с файлами через аргумент и выводит дважды содержание файла:
------------------------------------ Посоветуйте что можно сделать, я в С++ только начал
1
|
17.06.2010, 21:09 | |
Ответы с готовыми решениями:
74
работа с файлами работа с файлами Работа с файлами Работа с файлами |
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
||||||
18.06.2010, 12:26 | 21 | |||||
Для добавления записей в файл используй режим "a". Для сброса содержимого на диск во время работы программы и используй функцию fflush
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
18.06.2010, 12:43 | 22 |
Egeni, если ты про мой код, то при компиляции в DEV C++ 4.9.9.2 (очень рекомендую) выходит экзешник 19 кило. И всё.
Добавлено через 9 минут ...И да, всякий раз, дописываая нечто в файл, ты именно добавляешь, то есть "w" не канает (см. сообщение выше) Вообще поразбирайся с режимами открытия и прочее. Не забудь использовать fclose (). ...А вообще неправильно это всё. Объясняю. Не след нам вякий раз открывать файл на добавление имени директории. Это неграмотно, хотя и сработает. НАдо так: Создаёшь строку НУЖНОЙ длины, туда все имена директорий перегоняешь, потом ОДИН РАЗ открываешь файл на запись и туда перегоняешь эту строку с именами папок. ВСё. Хотя я тут подумал... А какой длины тебе нужна будет стррока? Заранее ведь неизвестно. Может, ты и прав, что всякий раз перегоняешь имя папки сразу в файл. В общем, лень не будет, поразмысли.
1
|
18.06.2010, 12:54 [ТС] | 23 | ||||||||||
а если файлов много, то мне кажется что данный алгоритм может загнуться при переполнении буфера или затормозиться очень сильно если не повиснуть вообще..
невыходит вывести путь к файлу программа находится в директории я пишу
sPath 2.txt sPath 3.txt sPath 4.txt как привести к виду: folder\2.txt folder\3.txt folder\4.txt если файлы находятся в папке? а то оно просто сканируемые файлы скидывает вот сама программа
0
|
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
||||||
18.06.2010, 13:04 | 24 | |||||
Сообщение было отмечено как решение
Решение
Переодически очищай буфер fflush'ем. На счет тормозов, если ты будешь сканировать весь диск, то естестввенно это займет некоторое время.
Хранить в отдельной строке имя текущей директории. Далее
1
|
Заблокирован
|
||||||
18.06.2010, 13:56 | 25 | |||||
Чтобы искать файлы не на диске D а в других каталогах - надо формировать строку для system() - т.е. вместо \"D:\\*.txt\" заводить что-то другое, надеюсь понятно как эта строка формироваться должна?
1
|
18.06.2010, 14:00 [ТС] | 26 | |||||
kazak, не выходит присвоение cur_dir немогу "декларировать переменную"
rrrFer, сейчас посмотрим
0
|
Заблокирован
|
||||||
18.06.2010, 14:01 | 27 | |||||
а почему если вставляю код не из блокнота, а из visual studio то вставляется что-то типа:
0
|
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
|
18.06.2010, 14:18 | 29 |
Весь твой листинг не видел, у тебя же sPath должен содержать путь к файлу.
fprintf( out, "%s\\%s\n", sPath, pFILEDATA.cFileName);
1
|
18.06.2010, 14:36 [ТС] | 30 | |||||
kazak, спасибо
Добавлено через 12 минут Инструкция по адресу "0x7c901010" обратилась к памяти по адресу "0x00000034". Память не может быть "read" 7C901010 cmp dword ptr [edx+14h],0 Что делать?
0
|
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
|
18.06.2010, 14:39 | 31 |
1
|
18.06.2010, 16:32 [ТС] | 33 |
Я не сталкивался до этого с отлаживаниями программ, видимо это время наступило...
Значит все происходит как... я запускаю программу: она ищет файлы ищет, ищет в консоли мелькает все... потом создается файл booklist.txt - 0 КБ и выскакивает ошибка Код
Инструкция по адресу "0x7c901010" обратилась к памяти по адресу "0x00000034". Память не может быть "read" Нажимаю Отмена вызывается отладчик и тыкает меня в строку с адресом Код
7C901010 cmp dword ptr [edx+14h],0
0
|
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
|
18.06.2010, 19:41 | 34 |
Egeni, а после записи файл кто закрывать будет?
1
|
19.06.2010, 00:45 [ТС] | 35 |
Согласен... я не закрывал файлов а оно видимо их понаоткрывало кучу
Добавлено через 3 часа 5 минут А как удалить из файла по несколько строк начинающихся с символов /* и заканчивающихся первым */ то есть удалить коментарии?
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
19.06.2010, 07:48 | 36 |
Ну этот вопрос можно рекомендовать в качестве задачки тык скыть.
И сразу же: если надумаешь решать, удаляй также комменатрии вида //
1
|
19.06.2010, 18:03 [ТС] | 37 |
Для использования парсинга в С++ применяются библиотеки boost++ и Qt но они утяжеляют код, как можно обойтись проще без этих библиотек:? самостоятельно:?
Я видел создавались похожие темы про парсинг HTML тегов, но без результатно, ответов в них нет, неужели никто не задумывался?
0
|
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
|
|
19.06.2010, 20:23 | 38 |
1
|
21.06.2010, 01:34 [ТС] | 39 | ||||||||||
http://www.pcre.org
зашел, скачал ftp://ftp.csx.cam.ac.uk/pub/so... ming/pcre/ и сразу возник такой вопрос зачем все так усложнять, я посидел и ужаснулся, что мне с этим всем делать и как это добро можно использовать? в этой библиотеке не нашел сам файл pcre.h который надо использовать. как установить или переписать библиотеку под себя?? Добавлено через 42 минуты /------------------------------------------------/ вот нашел упрощенную функцию замены символа на си
Код
char *ret=malloc(len), *ptr=ret; Cannot convert 'void *' to 'char *' Добавлено через 53 минуты -------------------------------------- вот еще задача функция замены всех вхождений подстроки в строке. функция имеет три аргумента: искомая строка, заменяемая стока и текст с котором необходимо выполнить данные действие
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
21.06.2010, 09:57 | 40 |
Я уже забыл о чём шла речь вообще, поэтому дам точечные советы.
По последней ошибке, скорее всего компилятор ищет функцию а-ля main и не может её найти Надо прописать где-нибудь в коде По невозможности ковертировать один тип в другой. Удивляться не приходится ведь malloc возвращает переменную типа void*, и это значение присваивается переменной типа char* Несоответсвие Ну, это часто я с таким сталкивался. Так единого рецепта решения проблемы не выработал. Эксперементируй с преобразованием типов. Можешь, ret объявить как void*, посмотри, что получится...
1
|
21.06.2010, 09:57 | |
21.06.2010, 09:57 | |
Помогаю со студенческими работами здесь
40
Работа с файлами Работа с файлами работа с файлами Работа с файлами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |