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

признак конца файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 137, средняя оценка - 4.80
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
13.09.2011, 20:01     признак конца файла #1
Здравствуйте
Проблема в том что функция зацикливается,не доходит до конца файла
вот код
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
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir)
{
        FILE *stream;
        char path[20]={0};
 
        if ((strcmp(FindFileData.cFileName,"..")==0) || (strcmp(FindFileData.cFileName,".")==0))//нужен только файл
        {
            std::cout << FindFileData.cFileName << "\n";
        }else
        {
            strcpy(path, Dir);
            path[strlen(path)-1]=0; //удаляем "*"
            strcat(path, FindFileData.cFileName);//склеиваем путь и имя файла
            stream = fopen(path,"r+");
            //std::cout << path << "\n";
            if (stream!=NULL)//если есть что считывать
            {
                while ( !feof(stream))//пока не конец файла
                {
                    
                }
            }
        }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 20:01     признак конца файла
Посмотрите здесь:

С клавиатуры вводятся целые числа. Признак конца ввода – 0. Определить количество минимальных значений., C++
признак конца ввода C++
C++ std::cin, eof не всегда принимается как признак конца файла
Не работает признак окончания ввода(признак-0) C++
Разработать алгоритм и программу для разбиения текста на строки (как признак конца строки в тексте использовать символ @) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ruu
13 / 13 / 1
Регистрация: 20.07.2010
Сообщений: 43
14.09.2011, 15:04     признак конца файла #2
Цитата Сообщение от ganjawar Посмотреть сообщение
stream = fopen(path,"r+");
C++
1
ifstream stream(path);
Цитата Сообщение от ganjawar Посмотреть сообщение
if (stream!=NULL)//если есть что считывать
C++
1
if (stream.is_open())
Цитата Сообщение от ganjawar Посмотреть сообщение
while ( !feof(stream))//пока не конец файла
C++
1
while(!stream.eof())
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.09.2011, 15:33     признак конца файла #3
Цитата Сообщение от ganjawar Посмотреть сообщение
while ( !feof(stream))//пока не конец файла
{
}
А как же мы попадем в конец файла, если из него ничего не читается?
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 14:23  [ТС]     признак конца файла #4
Спасибо.Попробую

Добавлено через 48 минут
а как Мне что-нибудь взять из файла?
точнее Мне надо брать каждый символ и менять его код..типо шифрования
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 14:29     признак конца файла #5
Для Си
C
1
2
3
4
5
int c;
while ((c = fgetc(stream)) != EOF)
{
/*что нибудь делаем с считаными символом*/
}
Для ++
C++
1
2
3
4
while ((c = stream.get()) != EOF)
{
/*что нибудь делаем с считаными символом*/
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
15.09.2011, 14:31     признак конца файла #6
Только не
C
1
char c;
а
C
1
int c;
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 14:32     признак конца файла #7
А еще лучше будет почитать про стандартные средства работы с файлами

Добавлено через 27 секунд
grizlik78, успел исправить
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 14:48  [ТС]     признак конца файла #8
а если c это int то в с будет код символа?
МНе нужен сам вимвол изменить его код и записать обратно

Добавлено через 6 минут
код изменил))
как записать обратно и чтобы не число а символ?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 14:48     признак конца файла #9
Да будет в с код символа. Просто функции надо возвращать 256 кодов символов и еще один специальный код, обозначающий конец файла. Всего 257 значений. Разрядности char'а для этого не хватает.
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 14:51  [ТС]     признак конца файла #10
это Я понял)как записать обратно?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 14:58     признак конца файла #11
Если в тот же самый файл, то примерно так
C
1
2
fseek (stream, SEEK_CUR, -1); /*возвращаемся на один символ назад*/
fputc(stream, c);
C++
1
2
3
//stream должен иметь тип fstream
stream.seekp(-1, ios_base::cur);
stream.put(c);
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 15:01  [ТС]     признак конца файла #12
а как же Мне сделать stream тип fstream??
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::ifstream file(path);
            if (file.is_open())//если файл открыт
            {
                    int c;
                    while ((c = file.get()) != EOF)
                    {
                    /*что нибудь делаем с считаными символом*/
                        std::cout << c <<"\t";
                        c = c+1;
                        std::cout << c <<"\n";
                        file.seekp(-1, ios_base::cur);
                        file.put(c);
                        //fputs (c,file);
                    }
            }
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 15:05     признак конца файла #13
Цитата Сообщение от ganjawar Посмотреть сообщение
C++
1
std::ifstream file(path);
=>
C++
1
std::fstream file(path);
ifstream для чтения
ofstream для записи
fstream для чтения-записи (хотя одну из функций можно отключать для конкретного объекта)
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 15:09  [ТС]     признак конца файла #14
спасибо большое..
и последний вопрос
как Мне сделать так,чтобы Я брал символ,менял его и записывал вместо того,который Я взял
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 15:13     признак конца файла #15
Так в 11 посте и есть вариант с перезаписью нового содержимого поверх старого.
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 15:33  [ТС]     признак конца файла #16
вместо qwerty получается rxxxxxxw и при чем все зацикливается..это получилось в результате отладки

Добавлено через 14 минут
как Я понял в режиме отладки ,что первый символ меняет нормально,а начиная со 2-го он берет символ меняет его ,а который был вставляет вместо следующего и получается бесконечно один и тот же символ
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 15:43     признак конца файла #17
Чуть-чуть подправил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(int argc, char* argv[])
{
   int c;
   fstream f;
   streampos pos;
   f.open("doc.txt");
   if (!f.is_open())
      return 1;
   while ((c = f.get()) != EOF)
   {
      cout << (char)c <<"\t";
      c = c+1;
      cout << (char)c <<"\n";
      pos = f.tellp();
      f.seekp(pos-1);
      f.put((char)c);
      f.tellp();
   }
   f.close();
   system("pause");
   return 0;
}
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 15:51  [ТС]     признак конца файла #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::fstream file(path);
            if (file.is_open())//если файл открыт
            {
                    int c;
                    streampos pos;
                    while ((c = file.get()) != EOF)
                    {
                    /*что нибудь делаем с считаными символом*/
                        std::cout << c <<"\t";
                        c = c+1;
                        std::cout << c <<"\n";
                        pos = file.tellp();
                        file.seekp(pos-1);
                        file.put((char)c);
                        file.tellp();
 
                    }
            }
ругается на (pos-1)
4 IntelliSense: существует несколько операторов "-", соответствующих этим операндам: c:\documents and settings\admin\рабочий стол\os_1\os_1\main.cpp 58 21 OS_1

Добавлено через 1 минуту
Ошибка 4 error C2666: std::fpos<_Statetype>::operator -: для 3 перегрузок есть подобные преобразования c:\documents and settings\admin\рабочий стол\os_1\os_1\main.cpp 58 1 OS_1
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.09.2011, 16:09     признак конца файла #19
Цитата Сообщение от ganjawar Посмотреть сообщение
file.seekp(pos-1);
C++
1
file.seekp((int)pos-1);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2011, 16:12     признак конца файла
Еще ссылки по теме:

C++ дана последовательность действительных чисел а1 а2 а3. признак конца последовательности 999
C++ Вводится последовательность символов. Признак конца ввода – точка. Посчитать количество символов не являющихся пробелами
Задача, на признак конца ввода C++

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

Или воспользуйтесь поиском по форуму:
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
15.09.2011, 16:12  [ТС]     признак конца файла #20
опять на 2-м символе зацикливается
Yandex
Объявления
15.09.2011, 16:12     признак конца файла
Ответ Создать тему
Опции темы

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