Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Please помогите решить задачу по С


Автор: b44 19.5.2006, 06:12
1.Дана строка S и текстовый файл. Добавить строку S в начало файла. 

Автор: MAKCim 19.5.2006, 07:32
fputs, fgets 

Автор: b44 19.5.2006, 09:50
пожалуйста напишите код 

Автор: jonie 19.5.2006, 10:17
принцип - сделать новый файл. сначала копируем строку нужную в него и добавляем все что осталось из второго файла. сторой файл удаляем. Я бы делал так (да и думаю иначе врядли возможно (ну я в смысле принципа создания нового файла)). 
Хотя мой пример не совсем для текстовых файлов (вообще говоря для бинарников...но думаю сделает туже работу)... иначе - юзайте fputs, fgets.
Код

#define MAX_BUFSIZE 4*1024    //4 kB to read

int _tmain(int argc, _TCHAR* argv[])
{
    const char srcname[] = "srcfile.bin";
    const char tmpname[] = "srcfile.bin.$$$";
    string str2add("some string to add\n");

    //откроем файл что существует
    FILE* fsrc = fopen(srcname,"r");
    //временный файл
    FILE* fout = fopen(tmpname,"w");
    
    fwrite(str2add.c_str(),1,str2add.length(),fout);

    char buffer[MAX_BUFSIZE];
    while(!feof(fsrc)){
        size_t reallyread = fread(&buffer,1,MAX_BUFSIZE,fsrc);
        fwrite(&buffer,1,reallyread,fout);
    }
    fclose(fsrc);
    fclose(fout);
    //переименуем в довершение новый файл затерев старый
    remove(srcname);
    rename(tmpname,srcname);
    return 0;
}
 

Автор: GremlinProg 19.5.2006, 10:33
Цитата

принцип - сделать новый файл

Совсем не обязательно. Открываем файл на чтение-запись, считываем содержимое в буфер, переводим курсор файла в начало, пишем строку, которую нужно добавить, пишем буфер, который ранее был сохранен, закрываем файл. 

Автор: jonie 19.5.2006, 10:47
Цитата

Совсем не обязательно. Открываем файл на чтение-запись, считываем содержимое в буфер, переводим курсор файла в начало, пишем строку, которую нужно добавить, пишем буфер, который ранее был сохранен, закрываем файл. 
я ж написал "ну я в смысле принципа создания нового файла". Твой метод читай создает новый файл на месте старого.... ну и ессно буфер метод давно известный. а вот чтобы сразу как append тока "спереди" файла сделать..... вот это былоб круто) 

Автор: likehood 19.5.2006, 10:57
аналогично, нельзя добавить спереди к массиву новый элемент, не перезаписав всего массива. 

Автор: GremlinProg 19.5.2006, 11:47
Цитата

Твой метод читай создает новый файл на месте старого....

Новый файл не создается, существующий открывается только один раз. Происходит просто перезапись существующего файла.
Цитата

аналогично, нельзя добавить спереди к массиву новый элемент, не перезаписав всего массива.  

А это можно сделать, но уже не в этом разделе ). Это сишный менеджер "кучи" работает на изменение размера "сзади", т.е. ищет подходящий блк памяти, который удовлетворит запрашиваемому размеру(но это опять же опционально: зарезервировать можно фиксированный блок памяти, который никогда не изменит свой начальный адрес, наоборот, все остальные блоки он будет размещать так, чтобы фиксированный блок не изменил адрес). Если кому-то интересно, создавайте тему в WinAPI разделе, там и продолжим дискуссию. 

Автор: b44 19.5.2006, 14:48
подскажите почему вылазиет ошибка на  
int _tmain(int argc, _TCHAR* argv[]) после TCHAR* просит закрыть скобку 

Автор: GremlinProg 19.5.2006, 14:51
потому что _TCHAR тип неизвестный. Если тебя не волнует совместимость с юникодом, то просто замени его на char 

Автор: b44 19.5.2006, 16:14
int _tmain(int argc, CHAR* argv[]);  он всеравно выдает ошибку между CHAR* и argv[])   

Автор: b44 19.5.2006, 20:01
помогите пожалуйста завтра уже сдавать! 

Автор: jonie 19.5.2006, 20:10
ну замени
Код

int _tmain(int argc, _TCHAR* argv[])

на
Код

int main()

или
Код

int main(int argc,char** argc)

Цитата
 Происходит просто перезапись существующего файла.
 замяли) тонкости. притом нафиг не нужные). 

Автор: b44 19.5.2006, 20:57
пожалуйста кто знает как решит эту задачу напишите код! please! если что моя ася 290100815  

Автор: b44 20.5.2006, 16:11
Please помогите! я абсолютный ноль в файлах! а сдавать надо! 

Автор: b44 20.5.2006, 16:54
все спасибо тема закрыта!!! 

Автор: b44 20.5.2006, 22:58
большое спасибо задача решена 

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