powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Считать из файла в С.
23 сообщений из 23, страница 1 из 1
Считать из файла в С.
    #39552667
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я должен прочитать из файла проверочную сумму, 8 байт
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
if (IsFileExists(checksum_file))
{
    FILE *file;
    char *checksum_buff = "";
    file = fopen(checksum_file, "r");
                            
    fread(checksum_buff, 8, 1, file);
    fclose(file);
}


один из аргументов fread функции - сколько байт прочитать. но байты могут быть записаны и со второй строчки. как задать считываемый размер?
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552670
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7байты могут быть записаны и со второй строчкиКогда читаешь БАЙТЫ, то нет никаких СТРОЧЕК.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552672
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinajenya7байты могут быть записаны и со второй строчкиКогда читаешь БАЙТЫ, то нет никаких СТРОЧЕК.
а если читаю чары?
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552675
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
jenya7Akinaпропущено...
Когда читаешь БАЙТЫ, то нет никаких СТРОЧЕК.
а если читаю чары? их в любом случае нет.
строки - это форматирование.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552676
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо читать построчно - используй fgets()
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552679
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7а если читаю чары?Чары - это те же байты, только по-другому интерпретируемые.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552680
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЕсли надо читать построчно - используй fgets()
спасибо. то есть алгоритмика такая
читаю строчку - делаю trim на нее - если длина строки 8 - значит найдена нужная строка - сохраняю значение и выхожу.
я правильно понял?
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552683
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но кстати fgets() тоже имеет аргумен размер строки. а как задать размер?
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552684
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
jenya7Dima TЕсли надо читать построчно - используй fgets()
спасибо. то есть алгоритмика такая
читаю строчку - делаю trim на нее - если длина строки 8 - значит найдена нужная строка - сохраняю значение и выхожу.
я правильно понял? а если непроверочная строка длиной 8 байт?
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552685
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TЕсли надо читать построчно - используй fgets()
спасибо. то есть алгоритмика такая
читаю строчку - делаю trim на нее - если длина строки 8 - значит найдена нужная строка - сохраняю значение и выхожу.
я правильно понял?
Все зависит от формата файла, который ты читаешь, т.е. вопрос надо задавать тому кто этот файл записал.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552688
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
eNosejenya7пропущено...

спасибо. то есть алгоритмика такая
читаю строчку - делаю trim на нее - если длина строки 8 - значит найдена нужная строка - сохраняю значение и выхожу.
я правильно понял? а если непроверочная строка длиной 8 байт?
в файле по идее должно быть записанно только 8 байт - checksum пакета данных.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552691
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7но кстати fgets() тоже имеет аргумен размер строки. а как задать размер?
Это не размер строки, а размер буфера, в который читать. Если буфер будет меньше строки, то прочитается только часть, сколько влезет в буфер.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552692
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
jenya7eNoseпропущено...
а если непроверочная строка длиной 8 байт?
в файле по идее должно быть записанно только 8 байт - checksum пакета данных. зачем тогда читать построчно?
читайте байты подряд и начиная со значимого (для вас) читайте 8.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552693
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7пропущено...

спасибо. то есть алгоритмика такая
читаю строчку - делаю trim на нее - если длина строки 8 - значит найдена нужная строка - сохраняю значение и выхожу.
я правильно понял?
Все зависит от формата файла, который ты читаешь, т.е. вопрос надо задавать тому кто этот файл записал.
файл обычный текстовой. в файле записанно только 8 байт - checksum пакета данных.
вопрос если я считываю построчно - как я знаю размер строки? в виде я могу открыть текстовый файл и растянуть его как угодно.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552704
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima Tпропущено...

Все зависит от формата файла, который ты читаешь, т.е. вопрос надо задавать тому кто этот файл записал.
файл обычный текстовой. в файле записанно только 8 байт - checksum пакета данных.
вопрос если я считываю построчно - как я знаю размер строки? в виде я могу открыть текстовый файл и растянуть его как угодно.
Ничего не понимаю: если в файле ровно 8 байт и их надо прочитать, то откуда взялась вторая строка?

Длина прочитанной строки: strlen()
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552717
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7пропущено...

файл обычный текстовой. в файле записанно только 8 байт - checksum пакета данных.
вопрос если я считываю построчно - как я знаю размер строки? в виде я могу открыть текстовый файл и растянуть его как угодно.
Ничего не понимаю: если в файле ровно 8 байт и их надо прочитать, то откуда взялась вторая строка?

Длина прочитанной строки: strlen()

человек открыл файл, нажал пару раз enter - позиция каретки не нулевая , и записал 8 байт.

а если так?
Код: 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.
if (IsFileExists(checksum_file))
   {
       FILE *file = fopen(checksum_file, "r");
       char buff[1024];
       char c;
       int char_count = 0;
       int i = 0;
       
        while ((c = fgetc(file)) != EOF)
        {
            if (isalnum(c))
            {
                buff[i++] = (char) c;
                char_count++;
            }
            
            if (char_coun == 8)
               break;
        }

        buff[i] = '\0'; 
        
        fclose(file);
   }
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552724
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если человек между проверочными байтами смайлик нарисует, или в шутку напишет английскими буквами неприличное слово, что тогда?

чексумма формируется обычно автоматом. а если какой-то идиот ее испортит, то он же может и еще чего-то испортить и пусть оно не проходит проверку.

имхо......
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552726
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovа если человек между проверочными байтами смайлик нарисует, или в шутку напишет английскими буквами неприличное слово, что тогда?

чексумма формируется обычно автоматом. а если какой-то идиот ее испортит, то он же может и еще чего-то испортить и пусть оно не проходит проверку.

имхо......
я не делаю защиту от полных идиотов, их там по идее не допустят, но если рука дрогнула и сумма прописалась не с нулевой позиции - обычное дело.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552727
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
странно - у ьеня на строке while ((c = fgetc(file)) != EOF) ругается
Warning[Pe514]: pointless comparison of unsigned integer with a negative constant
char у меня в компиляторе знаковый.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552729
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если задача стоит "где-то внутри файла есть 8 символов checksum", то можно и так.

Только я бы чуть поправил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
            if (isalnum(c))
            {
                buff[i++] = (char) c;
                char_count++;
            } else {
                char_count = 0;
                i = 0;
            }


Так прочитается только если 8 символов подряд.
И в конце не помешает проверить что прочитано 8.
Еще не помешает проверить что файл открылся.
И для buff 1024 многовато, достаточно 9 байт.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552731
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7странно - у ьеня на строке while ((c = fgetc(file)) != EOF) ругается
Warning[Pe514]: pointless comparison of unsigned integer with a negative constant
char у меня в компиляторе знаковый.
Потому что fgetc() возвращает int, т.е. надо
Код: sql
1.
int c;
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552732
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЕсли задача стоит "где-то внутри файла есть 8 символов checksum", то можно и так.

Только я бы чуть поправил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
            if (isalnum(c))
            {
                buff[i++] = (char) c;
                char_count++;
            } else {
                char_count = 0;
                i = 0;
            }


Так прочитается только если 8 символов подряд.
И в конце не помешает проверить что прочитано 8.
Еще не помешает проверить что файл открылся.
И для buff 1024 многовато, достаточно 9 байт.

спасибо. да так лучше.
а почему у меня на строке while ((c = fgetc(file)) != EOF) ругается
Warning[Pe514]: pointless comparison of unsigned integer with a negative constant
char у меня в компиляторе знаковый.
...
Рейтинг: 0 / 0
Считать из файла в С.
    #39552738
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7странно - у ьеня на строке while ((c = fgetc(file)) != EOF) ругается
Warning[Pe514]: pointless comparison of unsigned integer with a negative constant
char у меня в компиляторе знаковый.
Потому что fgetc() возвращает int, т.е. надо
Код: sql
1.
int c;


спасибо. понял.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Считать из файла в С.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]