Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Записване във файл.

Featured Replies

Искам да попитам, как мога да записвам в средата на файл без да губя съдържанието след това.

Моят код:

#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

int main()
{
    char tmp[256];
    char tmp2[] = "AddedLine";
    fstream file("test.txt");
    while(!(file.eof()))
    {
        file >> tmp;
        if((strcmp(tmp,"test"))==0)
        {
            file << tmp2; 
        }
    }
    return 0;
}
text.txt:

red
blue
green
test
black
 

 

Редактирано от RandomGuy (преглед на промените)

току що, RandomGuy написа:

Искам да попитам, как мога да записвам в средата на файл без да губя съдържанието след това.

Файлът не е контейнер с произволен запис - примерно като масив. От гледна точка на fstream съдържанието му се чете и съхранява последователно и не може да набуташ нещо в средата. Трябва ти да си осигуриш начин да запазиш това съдържание - примерно изчиташ си го и го дозаписваш след твоята добавка.

преди 6 минути, RandomGuy написа:

Искам да попитам, как мога да записвам в средата на файл без да губя съдържанието след това.

....

 

От това, което си спомням за стандартните функции можете да пишете отначалото или да добавите в края

току що, capnemo написа:

От това, което си спомням за стандартните функции можете да пишете отначалото или да добавите в края

И отначало не може. Тоест може да се пише в средата, но се изтрива старото - и със низове е неприятно, щото трябва да си бройкаш байтовете. Двоичен е по-добре.

преди 2 минути, flare написа:

И отначало не може. Тоест може да се пише в средата, но се изтрива старото - и със низове е неприятно, щото трябва да си бройкаш байтовете. Двоичен е по-добре.

Имах предвид че отваряйки със "стандартни" флагове файла започваш да пишеш отначалото :) (поне на С беше нещо такова)

  • Автор
преди 1 минута, flare написа:

И отначало не може. Тоест може да се пише в средата, но се изтрива старото - и със низове е неприятно, щото трябва да си бройкаш байтовете. Двоичен е по-добре.

Не мога двоичен в условието ми трябва да е html файл.

преди 54 минути, capnemo написа:

От това, което си спомням за стандартните функции можете да пишете отначалото или да добавите в края

Двоичните файлове могат да се отварят с произволен достъп, но при запис преди края, този запис се осъществява върху следващите елементи, като ги заменя със себе си.

преди 49 минути, RandomGuy написа:

Не мога двоичен в условието ми трябва да е html файл.

Дали файла е двоичен зависи от това, като какъв го отваряш, а не от това, какво му е разширението. Хтмл файла като го отвориш като двоичен, можеш да го четеш и да записваш в него с произволен достъп.

преди 58 минути, capnemo написа:

Имах предвид че отваряйки със "стандартни" флагове файла започваш да пишеш отначалото :) (поне на С беше нещо такова)

Като го отваряш за писане в началото, файла се отваря дори и да не съществува, а ако съществува, се изтрива предварително съдържанието му.

Ако го отваряш с произволен достъп за четене и писане има два варианта (като изключим варианта добавяне в края)

При единия вариант, файла трябва да съществува и не се изтрива автоматично при отваряне. При другия вариант, файлът не е задължително да съществува, но при отваряне задължително се изтрива

преди 1 час, RandomGuy написа:

Не мога двоичен в условието ми трябва да е html файл.

Аз не говорих за твоя случай а общо, за достъп в средата на файла. За текстов ти казах, как се прави.

преди 2 минути, flare написа:

Аз не говорих за твоя случай а общо, за достъп в средата на файла. За текстов ти казах, как се прави.

И хтмл и текстов, като се отворят като двоични, може да се чете и да се записва на произволни места.

току що, Реджеп Иведик написа:

И хтмл и текстов, като се отворят като двоични, може да се чете и да се записва на произволни места.

И това е пълна простотия в общия случай. Особено в днешно време, където кодировки с променлив брой байтове за символ са стандарт...

току що, Реджеп Иведик написа:

Само няма инсърт, всичко е оувър райт

Еми точно това казвам че няма да работи в общия случай - обикновено се иска подмяна с различен по дължина текст. Пък и да не е. Ако искаш в UTF8 да подмениш нула с българско "а" 'сичко отива на кино.

За да промениш текстов файл, правиш нов с някакво временно име. Четеш стария и записваш в новия като променяш това което трябва да смениш. След като прочетеш и запишеш целия файл, изтриваш старият файл и преименуваш новия с името с първоначалното име.

За да работят двоичните файлове правилно, трябва всеки запис да е с еднаква дължина. На практика всеки запис е елемент на масив, само че във файл а не в паметта. Днешно време повече се използват някакви методи за сериализация и те обикновено не са с фиксирана дължина на записа.

Редактирано от plamenbm86 (преглед на промените)

преди 9 минути, plamenbm86 написа:

За да промениш текстов файл, правиш нов с някакво временно име. Четеш стария и записваш в новия като променяш това което трябва да смениш. След като прочетеш и запишеш целия файл, изтриваш старият файл и преименуваш новия с името с първоначалното име.

това не е сигурно, че ще работи при всички права.

Това е вариант с пестене на памет. Приемаме, че имаш пълни права над директорията където е файла.  Другият вариант е да се прочете целия файл в паметта и просто да се презапише изцяло.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.