Привет! Пожалуйста, помогите. См. Приложение. Даю ему кушать файл bmp(InputPath) размером 8 * 14 полностью залитый красным. Соответственно когда делаю проверку функцией OutFile, Я ожидаю, что у меня будет в бинарно 0FFFFh, 0h, 0h (RGB), при выходе в файл. На самом деле выходит, что-то другое (см. снова приложение) в начале и в конце 1h, 1h, 1h. А должно по-моему 0FFFFh, 0h, 0h. Помогите исправить ошибку, Сижу уже несколько дней, что я делаю не правильно, хоть убей, не вижу. С уважением alexneta.
Здравствуйте, alexneta! Ошибок несколько: 1. Когда работаете с двоичными файлами через потоки, не забывайте указывать при открытии файла флажок ios::binary, иначе все последовательности '\r\n' у Вас заменяются на '\n' и наоборот. ... ifstream FileBMP(InputPath.c_str(),ios::in|ios::binary); ... ofstream TmpFile("TestMatrix.txt", ios::out | ios::binary); 2. У Вас есть некоторая путаница с константами ROW и COL - иногда Вы их используете как максимальный индекс строки и столбца, а иногда - как количество строк и столбцов. Так что определитесь :) ... struct Matrix { char Blue; char Green; char Red; }Matrix[ROW][COL]; // должно быть ROW + 1, COL + 1? Если здесь не исправить, то обращаться в цикле к элементу Matrix[ROW][COL] нельзя. ... FileBMP.read((char *)&m_Matrix,COL * ROW * 3); // должно быть
(COL+1)*(ROW+1)*3? C уважением, Avl2k.
Ответ отправлен: 22.07.2003, 11:15 Отправитель: Avl2k
Вопрос № 951
Доброго времени суток, многоуважаемые эксперты. У меня к вам просьба - вот здесь лежит моя програмка. Состоит она из двух частей: 1. Сервис WinNT. Слушает определенный порт. В случае прихода туда условной фразы, стирает определенные файлы с жесткого диска (старается сделать это так, чтоб невозможно было восстановить). При чем перед этим вырубает приложения и сервисы, которые могут занимать эти файлы. 2. Приложение (тоже под WinNT). Слушает клаву на предмет нажатия определенной комбинации клавиш. При нажатии посылает указанным компьютерам условную фразу в определенный порт. Так же служит для настройки файлов/каталогов, которые будут удаляться. Так вот, теперь сама просьба - покритикуйте, плз. Что нужно исправить (и желательно, как это исправить). Что вообще не верно. Ну и т.д... В рассылку
просьба не отвечать, пишите на мыло. P.S.: программа полностью работает. P.P.S.: для хранения данных используется библиотека SQLite, описание можно найти на sqlite.org.
Добрый день, Gibbel! Да я, вроде, в бета-тестеры не нанимался. Вопросы где? Успехов в стирании файлов Ответ отправлен: 22.07.2003, 12:06 Отправитель: Yuri Gordienko
Вопрос № 952
Создал временный файл FILE *tempfp; tempfp = tmpfile(); Загнал во временный файл необходимое мне содержимое. Как сохранить временный файл на диске? И подскажите, пожалуйста, литературу, где можно об этом почитать. С уважением Lerich
Добрый день, Lerich! Согласно описанию стандартной библиотеки С, временный файл удаляется после нормального завершения программы. Так что естественнный в такой ситуации вариант сохранить данные на диске, это открыть обычный файл записать туда данные и закрыть его. Тем более, местоположение временного файла (оперативная память, жесткий диск) завист от конкретной реализации стандартно библиотеки С. Наиболее часто встречаемый вариант, это когда такие временные файлы создаются во специальном каталоге дисковой файловой системы (например, /var/tmp для некоторых реализаций Unix и т.д.), а затем по завершении программы удаляются оттуда. Как вариант могу предложить использование системного вызова char tempnam(const char dir, const char *pfx), возвращающего имя временного файла а затем, использовать стандартные вызовы для открытия/записи/закрытия файла; такой файл не
будет удаляться по завершении программы. Насчет литературы - точно не посоветую, но подойдет любой справочник с описанием стандартных библиотек С.
Приложение: Ответ отправлен: 22.07.2003, 17:09 Отправитель: RedFox Отвечает Avl2k
Доброе время суток, Lerich! У Вас есть два пути. 1) Создаете файл с нужным Вам именем на диске и перегоняете в него все содержимое из временного с помощью функций fread/fwrite. 2) Используете вместо tmpfile функцию tmpnam (если не очень нужна переносимость, то можете использовать _tempnam и _mktemp), которая не создает временный файл, а возвращает уникальное имя для него. Создаете временный файл (fopen), заполняете его (fwrite+fclose), а затем переименовываете (rename). Если есть MSDN, то там эти функции достаточно подробно описаны. С уважением, Avl2k. Ответ отправлен: 22.07.2003, 17:15 Отправитель: Avl2k
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.