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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 219, средняя оценка - 4.68
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
17.06.2010, 21:09     [C++] Работа с файлами #1
Задача: Есть файлы, которые надо обработать:
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++
C++ Работа с файлами
C++ Работа с файлами С++
работа с файлами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.06.2010, 12:26     [C++] Работа с файлами #21
Для добавления записей в файл используй режим "a". Для сброса содержимого на диск во время работы программы и используй функцию fflush
C
1
fflush(out);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.06.2010, 12:43     [C++] Работа с файлами #22
Egeni, если ты про мой код, то при компиляции в DEV C++ 4.9.9.2 (очень рекомендую) выходит экзешник 19 кило. И всё.

Добавлено через 9 минут
...И да, всякий раз, дописываая нечто в файл, ты именно добавляешь, то есть "w" не канает (см. сообщение выше)

Вообще поразбирайся с режимами открытия и прочее. Не забудь использовать fclose ().

...А вообще неправильно это всё.
Объясняю.
Не след нам вякий раз открывать файл на добавление имени директории. Это неграмотно, хотя и сработает.
НАдо так: Создаёшь строку НУЖНОЙ длины, туда все имена директорий перегоняешь, потом ОДИН РАЗ открываешь файл на запись и туда перегоняешь эту строку с именами папок. ВСё.

Хотя я тут подумал... А какой длины тебе нужна будет стррока? Заранее ведь неизвестно. Может, ты и прав, что всякий раз перегоняешь имя папки сразу в файл. В общем, лень не будет, поразмысли.
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 12:54  [ТС]     [C++] Работа с файлами #23
а если файлов много, то мне кажется что данный алгоритм может загнуться при переполнении буфера или затормозиться очень сильно если не повиснуть вообще..

невыходит вывести путь к файлу программа находится в директории
я пишу
C++
1
2
3
4
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
                FILE *out = fopen( "booklist.txt", "a" );
          fprintf( out, "sPath %s\n", pFILEDATA.cFileName);
и получаю в буклисте (после закрытия программы...)
sPath 2.txt
sPath 3.txt
sPath 4.txt

как привести к виду:
folder\2.txt
folder\3.txt
folder\4.txt
если файлы находятся в папке? а то оно просто сканируемые файлы скидывает


вот сама программа
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
67
68
69
70
71
72
73
74
75
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT);
 
int main(){
 
//Поскольку sPath и sExt и sEXT одинаковы во всех вызовах GetFileList, их можно было бы сделать
//глобальными, но я так оставил. 
        char sPath[MAX_PATH]= "Folder";
 
//Обратить  внимание на размер массива!
        char sExt[10]= "txt";
        char sEXT[10]= "TXT";
        GetFileList(sPath, sExt, sEXT);
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
      printf("rez= %d\n", rez);
  system ("PAUSE");
}
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
     GetFileList(strcat(sPath,pFILEDATA.cFileName), sExt, sEXT);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
    //Проверяем на соотвествие sExt расширения pFILEDATA.cFileName
    if((chBuf = strrchr(pFILEDATA.cFileName,'.'))) {
     if(strstr(chBuf + 1,sExt)|| strstr(chBuf + 1,sEXT)) {
      //Если не будем использовать CharToOem() то на экране русский шрифт каракулями выйдет
      CharToOem(sPath,sPath);
      printf("%s",sPath);
      OemToChar(sPath,sPath);
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
                FILE *out = fopen( "booklist.txt", "a" );
          fprintf( out, "sPath %s\n", pFILEDATA.cFileName);
     }
    }
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.06.2010, 13:04     [C++] Работа с файлами #24
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Egeni Посмотреть сообщение
а если файлов много, то мне кажется что данный алгоритм может загнуться при переполнении буфера или затормозиться очень сильно если не повиснуть вообще..
Переодически очищай буфер fflush'ем. На счет тормозов, если ты будешь сканировать весь диск, то естестввенно это займет некоторое время.

Цитата Сообщение от Egeni Посмотреть сообщение
как привести к виду:
folder\2.txt
folder\3.txt
folder\4.txt
если файлы находятся в папке? а то оно просто сканируемые файлы скидывает
Хранить в отдельной строке имя текущей директории. Далее
C
1
fprintf( out, "%s\\%s\n", cur_dir, pFILEDATA.cFileName);
rrrFer
Заблокирован
18.06.2010, 13:56     [C++] Работа с файлами #25
C++
1
2
3
4
5
#include <stdlib.h>
int main(void){
    system("dir /s \"D:\\*.txt\" > \"full_ccal.txt\"");
    return 0;
}
в файле full_ccal.txt будут имена файлов .txt с диска D:\ примерно такого типа:
Содержимое папки D:\
18.06.2010 17:42 0 booklist.txt
18.06.2010 17:52 0 full_ccal.txt
18.06.2010 17:16 0 Текстовый документ (2).txt
18.06.2010 17:16 0 Текстовый документ.txt
4 файлов 0 байт
Содержимое папки D:\music\старое\Аида Ведищева-128 kbps\Аида Ведищева CD1
17.10.2009 19:41 506 Треклист.txt
1 файлов 506 байт
Содержимое папки D:\music\старое\Аида Ведищева-128 kbps\Аида Ведищева CD2
18.10.2009 00:34 384 Треклист.txt
1 файлов 384 байт
Дальше наверное надо распарсить файл. Чтобы не выводить лишнего - почитайте описание команды dir. И потом вывести файл на экран для этого можно использовать system("notepad file.txt");
Чтобы искать файлы не на диске D а в других каталогах - надо формировать строку для system() - т.е. вместо \"D:\\*.txt\" заводить что-то другое, надеюсь понятно как эта строка формироваться должна?
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 14:00  [ТС]     [C++] Работа с файлами #26
kazak, не выходит присвоение cur_dir немогу "декларировать переменную"

rrrFer, сейчас посмотрим
C++
1
2
3
4
5
#include<stdlib.h>
int main(void){
system("dir /s \"D:\\*.txt\" > \"full_ccal.txt\"");
return 0;
}
rrrFer
Заблокирован
18.06.2010, 14:01     [C++] Работа с файлами #27
а почему если вставляю код не из блокнота, а из visual studio то вставляется что-то типа:
C++
1
2
3
4
5
6
7
[SIZE=1][COLOR=#ff00ff][SIZE=1][COLOR=#ff00ff]
#include[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0] [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ff00][SIZE=1][COLOR=#00ff00]<stdlib.h>
[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ffff][SIZE=1][COLOR=#00ffff]int[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0] main([/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ffff][SIZE=1][COLOR=#00ffff]void[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0]){
system([/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ff00][SIZE=1][COLOR=#00ff00]"dir /s \"D:\\*.txt\" > \"full_ccal.txt\""[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0]);
[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ffff][SIZE=1][COLOR=#00ffff]return[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0] [/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#00ff00][SIZE=1][COLOR=#00ff00]0[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1][COLOR=#c0c0c0][SIZE=1][COLOR=#c0c0c0];
}
[/COLOR][/SIZE][/COLOR][/SIZE]
наверно потому что я в настройках форума выбрал не стандартный а какой-то другой редактор
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 14:08  [ТС]     [C++] Работа с файлами #28
на счет использования "системового дира" в файл выходит очень много чепухи, которую опять потом нужно обрабатывать, хотя и вариант простой;

хорошо тогда как парсить?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.06.2010, 14:18     [C++] Работа с файлами #29
Цитата Сообщение от Egeni Посмотреть сообщение
kazak, не выходит присвоение cur_dir немогу "декларировать переменную"
Весь твой листинг не видел, у тебя же sPath должен содержать путь к файлу.
fprintf( out, "%s\\%s\n", sPath, pFILEDATA.cFileName);
Egeni
10 / 10 / 1
Регистрация: 17.06.2010
Сообщений: 107
Записей в блоге: 1
18.06.2010, 14:36  [ТС]     [C++] Работа с файлами #30
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <windows.h>
#include <stdio.h>
 
long int rez= 0;
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT);
 
int main(){
 
//Поскольку sPath и sExt и sEXT одинаковы во всех вызовах GetFileList, их можно было бы сделать
//глобальными, но я так оставил. 
        char sPath[MAX_PATH]= "C:";
 
//Обратить  внимание на размер массива!
        char sExt[10]= "txt";
        char sEXT[10]= "TXT";
        GetFileList(sPath, sExt, sEXT);
//Портит всё дело: Если перенаправлять в файл с консоли, то полуачается, что в консол ведут 
//запись два разных потока- тот,который нужент и этот,который записывает "Для продлжения нажмите любую
//клавишу" и эта надпись вклинивается в серёдку и портит всё дело
      printf("rez= %d\n", rez);
  system ("PAUSE");
}
 
void GetFileList(LPTSTR sPath, LPTSTR sExt, LPTSTR sEXT) {
 
 WIN32_FIND_DATA pFILEDATA;
 
 HANDLE hFile = FindFirstFile(strcat(sPath,"\\*.*"),&pFILEDATA);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!Необходимо именно здесь прописывать длину пути!!!!!!!!!!!!!!!!!!!!!!!
 sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
//Если пропишем после if (как предлагает Юра), то тогда, если вдруг натыкаемся на системную директорию
// или файл, то FindFirstFile возвращает -1. Следовательно, всё, что выплнняется по условию
//(hFile!=INVALID_HANDLE_VALUE) не выолнится и в частности, не будет поставлен конец строки!
//А это значит, что по выходу из  рекурсивной функции GetFileList в том месте, где мы восстанавливаем
//Длину, она будет восстановлена неправильно
 if (hFile!=INVALID_HANDLE_VALUE)    {
  char * chBuf;
  //sPath[strlen(sPath) - strlen(strstr(sPath,"*.*"))] = '\0';
  do {
   //Пропускаем . и ..
   if (strlen(pFILEDATA.cFileName) == 1 &&  strchr(pFILEDATA.cFileName,'.') !=NULL)
    if (FindNextFile(hFile,&pFILEDATA) == 0)
      break;
   if (strlen(pFILEDATA.cFileName) == 2 && strstr(pFILEDATA.cFileName,"..") !=NULL)
    if(FindNextFile(hFile,&pFILEDATA) == 0)
      break;
     //Если нашли директорию, запускаем поиск в ней рекурсивный поиск
   if(pFILEDATA.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
     GetFileList(strcat(sPath,pFILEDATA.cFileName), sExt, sEXT);
 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!оБЯЗАТЕЛЬН востанавливать дллину пути................................     
     sPath[strlen(sPath) - strlen(pFILEDATA.cFileName)- 1] = '\0';
   }
   else {
    //Проверяем на соотвествие sExt расширения pFILEDATA.cFileName
    if((chBuf = strrchr(pFILEDATA.cFileName,'.'))) {
     if(strstr(chBuf + 1,sExt)|| strstr(chBuf + 1,sEXT)) {
      //Если не будем использовать CharToOem() то на экране русский шрифт каракулями выйдет
      CharToOem(sPath,sPath);
      printf("%s",sPath);
      OemToChar(sPath,sPath);
      CharToOem(pFILEDATA.cFileName,pFILEDATA.cFileName);
      printf("%s\n",pFILEDATA.cFileName);
      rez++;
                FILE *out = fopen( "booklist.txt", "a" );
                fprintf( out, "%s\%s\n", sPath, pFILEDATA.cFileName);     }
    }
   }
  }
  while (FindNextFile(hFile,&pFILEDATA));
 }
}
Вот общими усилиями собрали, работает, но выкидывает ошибку видимо при переполнении, как вы говорили fflush использовать?

Добавлено через 12 минут
Инструкция по адресу "0x7c901010" обратилась к памяти по адресу "0x00000034". Память не может быть "read"

7C901010 cmp dword ptr [edx+14h],0

Что делать?
kazak
 Аватар для kazak
3029 / 2350 / 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
 Аватар для kazak
3029 / 2350 / 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
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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
 Аватар для kazak
3029 / 2350 / 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'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2010, 09:57     [C++] Работа с файлами
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.06.2010, 09:57     [C++] Работа с файлами #40
Я уже забыл о чём шла речь вообще, поэтому дам точечные советы.
По последней ошибке, скорее всего компилятор ищет функцию а-ля main и не может её найти

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

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

Несоответсвие
Ну, это часто я с таким сталкивался. Так единого рецепта решения проблемы не выработал. Эксперементируй с преобразованием типов. Можешь, ret объявить как void*, посмотри, что получится...
Yandex
Объявления
21.06.2010, 09:57     [C++] Работа с файлами
Ответ Создать тему
Опции темы

Текущее время: 01:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru