Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > чтение\запись char* в файл


Автор: Solomon 30.7.2007, 15:48
Вообщем суть вот в чем... у меня есть в наличии две переменные int это как бы размер 
и чаровский массив char* 
как это все культурно сохранить и потом считать из файла.. особено меня интересует char*... 
И еще небольшой вопросик? char переменную если сохранять как символ или бинарно будет отличие в размере файла? 

Автор: _hunter 30.7.2007, 16:02
ReadFile/WriteFile...

Автор: Solomon 30.7.2007, 16:06
_hunter, чего??? а это то тут причем?? мне в консоле надо стандартными средствами...
записать в файл надо два инта lnt и потом чаровский массив на кот у нас есть указатель.. и соответственно считать потом это все 

Автор: Kuvaldis 30.7.2007, 16:06
Solomon, 
Цитата

И еще небольшой вопросик? char переменную если сохранять как символ или бинарно будет отличие в размере файла? 

Нет, разницы не будет, так как char знаимает 1 байт

Добавлено через 2 минуты и 5 секунд
Делай бинарый файл, записывай сначала туда int, а потом строку 
все операции: fread /fwrite (или через файловый дескриптор и read / write )  

Автор: Daevaorn 30.7.2007, 16:08
Цитата(Solomon @  30.7.2007,  16:48 Найти цитируемый пост)
как это все культурно сохранить и потом считать из файла.. особено меня интересует char*... 

сохранить длину строки, потом саму строку непосредственно(как массив байт). чтение наоборот - прочитать размер, выделить нужное количество памяти для строки и прочитать туда строку( тоже как массив).
Цитата(Solomon @  30.7.2007,  16:48 Найти цитируемый пост)
И еще небольшой вопросик? char переменную если сохранять как символ или бинарно будет отличие в размере файла?  

нет

Автор: bsa 30.7.2007, 16:08
тут есть варианты. Вот вариант сохранения в бинарный файл:
Код
int size;
const char *text = "some text";
int fd = open("file", O_BINARY | O_CREAT | O_WRONLY, S_IREAD | S_IWRITE);
size = strlen(text);
if (fd >= 0) {
    write(fd, &size, sizeof(size) );
    write(fd, text, size);
    close(fd);
}
//чтение
fd = open("file", O_BINARY | O_RDONLY, S_IREAD | S_IWRITE);
char *new_text;
if (fd >= 0) {
    read(fd, &size, sizeof(size) );
    if (size > 0) {
         new_text = (char*)malloc(size+1);
         read(fd, text, size);
         text[size] = '\0';
    } else
         text = NULL;
    close(fd);
}

Автор: Daevaorn 30.7.2007, 16:09
Цитата(Kuvaldis @  30.7.2007,  17:06 Найти цитируемый пост)
Нет, разницы не будет, так как char знаимает 1 байт

не факт, но в 95% конечно 1 байт.

Автор: Solomon 30.7.2007, 16:10
Цитата(Daevaorn @  30.7.2007,  15:08 Найти цитируемый пост)
сохранить длину строки
 ну вообщем длинну строки можно получить перемножив две интовские переменные и еще их перемножив на 3...

Автор: Daevaorn 30.7.2007, 16:12
Цитата(Solomon @  30.7.2007,  17:10 Найти цитируемый пост)
 ну вообщем длинну строки можно получить перемножив две интовские переменные и еще их перемножив на 3...

ну это ты конечно сморозил не то что-то...

Автор: Solomon 30.7.2007, 16:12
ну вообщес из вышесказанного думаю разберусь.. если будут еще вопросы то напишу... всем спасибо

Добавлено через 2 минуты
Цитата(Daevaorn @  30.7.2007,  15:12 Найти цитируемый пост)
ну это ты конечно сморозил не то что-то...

да нет..  smile 
просто вот какая ситуация.. картинку представляеш? две переменные это её размеры... еще на 3 - это каждый пикчель имеет три значения.. вот эти то значения и хранятся в массиве char* впринципе практически структура bmp файла... 

Автор: Daevaorn 30.7.2007, 16:17
Цитата(Solomon @  30.7.2007,  17:12 Найти цитируемый пост)
да нет..  smile 
просто вот какая ситуация.. картинку представляеш? две переменные это её размеры... еще на 3 - это каждый пикчель имеет три значения.. вот эти то значения и хранятся в массиве char* впринципе практически структура bmp файла... 

ну это твое дело как ты его получаешь. просто нужно точно знать размер массива и этот размер записать в файл.

Автор: akizelokro 31.7.2007, 11:04
а в char * у тебя только текстовуха? 0x00 не стоят где попало? или еще какая попало явно не текстовуха? бинарник всяко лучше. 
инты лучше не писать. sizeof выдаст на одном компе 2 байта, на другом 4. лучше принудительно пиши 2 байта, либо пиши лонги, они имхо чаще 4 байта., хотя к интам они могут свестись коряво?! (signed-unsigned) потом бросай собственно битовуху c уверенностью что об символ конца файла не обломишься нигде.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)