Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование из файла в файл 
V
    Опции темы
Metalex
Дата 14.4.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Здравствуйте!
У меня проблема: из первого файла все содержимое должно копироватся во второй, первый очищается и в начало записывается строка, и затем все содержимое второго файла копируется в первый. +все это в функции. То есть произвотидся добавление строк в начало файла.
Когда я открываю файл проверить, что в нем, там только последняя строка, остальных нет..
Код

    fstream from("one.txt", ios::in|ios::out);
    if (!from.is_open())
    {
        cout<<"Error! Not openfile. 1"<<endl;
        system ("Pause");
        exit (1);
    }
    fstream to("dopoln.txt", ios::in|ios::out);
    if (!to.is_open())
    {
        cout<<"Error! Not openfile. 2"<<endl;
        system ("Pause");
        exit (1);
    }
    string stroka;
    while (getline (from, stroka))
    {
        to<<stroka<<endl;
    }
    from<<s<<endl;
    while (getline (to, stroka))
    {
        from<<stroka<<endl;
    }
    from.close();
    to.close();

Благодарю за помощь!

Добавлено через 13 минут и 46 секунд
И еще вопрос: как скопировать из одного файла в другой все, кроме последней строки?


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
17dufa
Дата 14.4.2010, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



Вы уверены, что Вам не в центр помощи? http://forum.vingrad.ru/Vingrad-help-center.html
а реализация с копированием во второй файл - это по заданию? может исходным файлом обойтись (сдвиг вперед и запись в начала новой первой строки)? если все-таки копирование - не проще ли вызвать функцию ОС для копирования файла?
PM MAIL   Вверх
Metalex
Дата 14.4.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



17dufa, у меня файловые потоки, а не функции ОС.
Цитата(17dufa @  14.4.2010,  15:56 Найти цитируемый пост)
может исходным файлом обойтись (сдвиг вперед и запись в начала новой первой строки)

Обьясните, пожалуйста, как это реализовать.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
17dufa
Дата 14.4.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



Metalex, что-то я того, не уверен. для памяти отработает. а вот для файлов... зависит от того, как работает файловый вывод - с конца или с начала, если с конца - получится, если с начала - фиг, ну или придется посимвольно с файлом работать. задача реализовать что-то наподобие:
Код

for (int i = size-1; i > 0; --i)
{
buf[i] = buf[i-1];
}
//весь массив buf сдвинут на 1 элемент вправо, нулевой элемент освободился для записи. можно аналогично сдвигать на более чем одну позицию:) кстати, если сдвигать сразу на n позиций, то можно сразу n элементов сдвигать.

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

*Вы не ответили на вопрос - Вы уверены, что вам не в "Центр помощи"?
PM MAIL   Вверх
Metalex
Дата 14.4.2010, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



17dufa, уверен. 
А уверен ли ты, что знаешь, что пишешь? smile
Если не уверен, то лучше меня не путать, а то у меня еще все знания по файлам сырые  smile 


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
djamshud
Дата 14.4.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



>Обьясните, пожалуйста, как это реализовать.

Никак. Не сделать сдвиг данных файла. Только если лезть в глубины файловой системы.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Metalex
Дата 14.4.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Цитата(Metalex @  14.4.2010,  16:27 Найти цитируемый пост)
17dufa, уверен. 

А если модеры посчитают нужным, они переместят, не беспокойся.

Добавлено через 51 секунду
djamshud, я об этом догадывался..


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
djamshud
Дата 14.4.2010, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



>И еще вопрос: как скопировать из одного файла в другой все, кроме последней строки?

Записывать в новый файл предыдущую строку после того, как прочитана следующая. Если следующей нет - не писать. Конкретно по коду ничего не подскажу, стримы люто не люблю.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
ИванМ
Дата 14.4.2010, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Metalex, т.е. как я понимаю нужно просто скопировать второй файл в начала первого? Сначала в на выходе в первом файле находится содержимое второго файла, а потом то что было в первом изначально?
Если так, то можно скопировать первый файл в list, потом записать данные второго файл в первый и добавить содержимое листа туда же.
Это делается буквально в нескольких строчках. 
PM MAIL   Вверх
djamshud
Дата 14.4.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



ИванМ, гигабайтовые файлы плачут по вашим идеям:). Временный файл - правильное решение.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
Metalex
Дата 14.4.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



ИванМ, 
1) (то, где я писал код): у меня есть допустим сначала пустой файл. Мне нужно записать в него строку. При следующем вызове ф-ции в нее передается строка, которая помещается в файл перед тем, что там уже есть.
2) Как скопировать из одного файла в другой все, кроме последней строки?
Если можно, то с кодом.. буду признателен.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
17dufa
Дата 14.4.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 324
Регистрация: 2.3.2006

Репутация: 3
Всего: 5



djamshud, вот не надо грязи smile 
Код

int main () {

    std::ifstream  ifile("C:\\1.txt", ifstream::in);
    ifile.seekg(0, std::ios_base::end);
    int size = ifile.tellg();
    ifile.seekg(-1, std::ios_base::end);
    std::ofstream ofile("C:\\1.txt", ofstream::in | ofstream::out);
    ofile.seekp(0, std::ios_base::end);

    for (int i = size; i > 0; --i)
    {
        char c;
        ifile >> c;
        ofile << c;
        ifile.seekg(-2, std::ios_base::cur);
        ofile.seekp(-2, std::ios_base::cur);
    }
    ifile.close();
    ofile.close();
}


удваивает первый символ в файле.
допилить рашпилем до случая Metalex надеюсь возможно smile 

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

Это сообщение отредактировал(а) 17dufa - 14.4.2010, 16:55
PM MAIL   Вверх
ИванМ
Дата 14.4.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



djamshud, тоже глобально мыслите?  smile 
PM MAIL   Вверх
djamshud
Дата 14.4.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



17dufa, ну херню же написали. Взяли да перекопировали все данные в файле. Это не есть сдвиг. Кроме того, если произойдет sync записываемого файла, будет шляпа.

Добавлено через 1 минуту и 29 секунд
ИванМ, я просто стараюсь смотреть на ход вперед;). Никогда, никогда не читайте целиком файлы в память.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
ИванМ
Дата 14.4.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



djamshud, "никода не говори никогда" smile 
На самом деле вы, конечно, правы (на счет моего варианта).

Это сообщение отредактировал(а) ИванМ - 14.4.2010, 17:20
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.