Суть проблемы:
Есть текстовый файл, в который сохранили набор байт (разные кракозябры типа IПў0g’юрЙGFЊW›зщDdO?Шy‹ґіХ™Їж@¶ґДtFFж(–џ=Ѓ9hа").
Через поток пытаюсь загрузить этот файл в переменную :
И вроде все грузит, но как только система встречает среди байт NUL (т.е. '\0') — она считает это концом файла и дальше считывание не идет.
А таких НУЛ'ов в файле штук сто.
Подскажите, если кто знает, как обойти это, чтоб считывание шло игнорирую байт конца файла.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Через поток пытаюсь загрузить этот файл в переменную :
А>>os.write(Buffer, 1000);
А>>И вроде все грузит
S>расскажите как вам так удалось с помощью функции write загружать файл в переменную?
Здравствуйте, Sni4ok, Вы писали:
S>расскажите как вам так удалось с помощью функции write загружать файл в переменную?
Наоборот, всё понятно стало. У него write пишет до 0, а он потом думает, что у него файл не так читается...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Sni4ok, Вы писали:
S>>расскажите как вам так удалось с помощью функции write загружать файл в переменную? E>Наоборот, всё понятно стало. У него write пишет до 0, а он потом думает, что у него файл не так читается...
Запись в файл проходит без проблем. А вот чтение останавливается при встрече первого НУЛ
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, irbis3003, Вы писали:
I>>Запись в файл проходит без проблем. А вот чтение останавливается при встрече первого НУЛ
S>а как вы определили, что останавливается на NULL'е, сколько байт прочитано возвращает?
Файл, который прочитывается создается после шифрования, поэтому символы там встречаются псевдослучайно.
Видимо как только на выходе получалось "\0", система принимала это за конец.
А понял что выполнение программы заканчивается именно в этом месте просто, методом научного тыка. Взял несколько файлов одинаковой длины, но разного содержания. (18551 байт). В разных файлах \0 встречается в разных местах (может через 10 байт, может через 1500). Эту длину и возвращала функция.
Здравствуйте, irbis3003, Вы писали:
I>В разных файлах \0 встречается в разных местах (может через 10 байт, может через 1500). Эту длину и возвращала функция.
Какая именно функция возвращала эту длину? А то "меня терзают смутные сомненья" ...
Здравствуйте, Антипа, Вы писали:
А>Здравствуйте, irbis3003, Вы писали:
I>>В разных файлах \0 встречается в разных местах (может через 10 байт, может через 1500). Эту длину и возвращала функция.
А>Какая именно функция возвращала эту длину? А то "меня терзают смутные сомненья" ...
is.gcount();
Ну а вообще — нетрудно выгрузить полученные байты снова в файл или мемо и посмотреть что считали.
Здравствуйте, irbis3003, Вы писали:
I>Здравствуйте, Антипа, Вы писали:
А>>Здравствуйте, irbis3003, Вы писали:
I>>>В разных файлах \0 встречается в разных местах (может через 10 байт, может через 1500). Эту длину и возвращала функция.
А>>Какая именно функция возвращала эту длину? А то "меня терзают смутные сомненья" ...
I>is.gcount(); I>Ну а вообще — нетрудно выгрузить полученные байты снова в файл или мемо и посмотреть что считали.
Здравствуйте, irbis3003, Вы писали:
I>is.gcount();
Точно? У меня есть подозрения, что вы использовали функции для работы с '\0'-завершёнными строками.
I>Ну а вообще — нетрудно выгрузить полученные байты снова в файл или мемо и посмотреть что считали.
Вы это делали? Покажите код.
Здравствуйте, Антипа, Вы писали:
А>Здравствуйте, irbis3003, Вы писали:
I>>is.gcount(); А>Точно? У меня есть подозрения, что вы использовали функции для работы с '\0'-завершёнными строками.
I>>Ну а вообще — нетрудно выгрузить полученные байты снова в файл или мемо и посмотреть что считали. А>Вы это делали? Покажите код.
А>Я проверил, все работает так, как и должно:
А>
Здравствуйте, irbis3003, Вы писали:
I>Сейчас попробую подобное. Отпишусь о результатах.
А как ты делал РАнЬШЕ?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Обратите внимание, dabeat_bf, что это он так работает с исходными открытыми данными. Но топикстартер никак не хочет показать кусок кода, в котором он определяет длину считанных зашифрованных данных.
Здравствуйте, Антипа, Вы писали:
А>Обратите внимание, dabeat_bf, что это он так работает с исходными открытыми данными. Но топикстартер никак не хочет показать кусок кода, в котором А>он определяет длину считанных зашифрованных данных.
я так понимаю что именно так он и определяет длину... считывает в массив, а потом для массива вызывает strlen... логично что длина будет наблюдатся описанная проблема
Здравствуйте, Антипа, Вы писали:
А>Здравствуйте, irbis3003, Вы писали:
I>>is.gcount(); А>Точно? У меня есть подозрения, что вы использовали функции для работы с '\0'-завершёнными строками.
I>>Ну а вообще — нетрудно выгрузить полученные байты снова в файл или мемо и посмотреть что считали. А>Вы это делали? Покажите код.
А>Я проверил, все работает так, как и должно:
А>
Здравствуйте, _niko_, Вы писали:
__>Здравствуйте, irbis3003, Вы писали:
I>>Сделал так же (хотя до этого мой код мало чем от этого отличался), все получилось. Весьма благодарен!
__>dabeat_bf указал же на ошибку в коде (strlen):
__>
__>InBlockLen = strlen(InBlock)*sizeof(char);
__>
Дело не в этом — вместо длины строки в виде переменной я пробовал руками писать ее значение.
Честно говоря, даже сам не совсем понял что именно в коде изменилось, что привело к работоспособности.
Буду разбираться.