powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Копирование файла с определённого байта
6 сообщений из 6, страница 1 из 1
Копирование файла с определённого байта
    #39211728
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так копируем весь файл:
Код: plaintext
1.
2.
3.
4.
5.
std::ifstream in ("1.txt");
 std::ofstream out("2.txt");
 out << in.rdbuf();
 out.close();
 in.close();


А как начать копирование с 3500 байта, например.
Может быть, чтото с использованием SEEK_SET?
...
Рейтинг: 0 / 0
Копирование файла с определённого байта
    #39211776
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465,

Код: plaintext
1.
2.
3.
4.
5.
6.
in.seekg(10); // стартовая позиция
std::copy_n(
    std::istreambuf_iterator<char>(in), 
    10,       // количество
    std::ostreambuf_iterator<char>(out)
);
...
Рейтинг: 0 / 0
Копирование файла с определённого байта
    #39211777
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
in.seekg(10); // стартовая позиция
std::copy(    // и копировать до конца файла
    std::istreambuf_iterator<char>(in), 
    std::istreambuf_iterator<char>(),
    std::ostreambuf_iterator<char>(out)
);
...
Рейтинг: 0 / 0
Копирование файла с определённого байта
    #39211990
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465А как начать копирование с 3500 байта, например.
Может быть, чтото с использованием SEEK_SET?Да:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
#include <assert.h>
#include <stdio.h>
#include <algorithm>

int file_size(FILE* file) {
  assert(ftell(file) == 0); // вызывать надо сразу после открытия файла
  fseek(file, 0, SEEK_END); // ставим position в конец файла
  int size = ftell(file); // получаем position
  fseek(file, 0, SEEK_SET); // ставим position обратно в начало файла
  return size;
}

void partially_copy_file(const char source_path[], const char dest_path[], int start_pos) {
  assert(start_pos >= 0);
  FILE* sf = fopen(source_path, "rb");
  FILE* df = fopen(dest_path, "wb");
  int size = file_size(sf);
  if (size > start_pos) {
    const int buf_size = 4 * 1024;
    unsigned char buf[buf_size];
    // копируем файл кусками
    int pos = start_pos;
    fseek(sf, start_pos, SEEK_SET); // ставим position в start_pos
    while (pos < size) {
      int n = std::min(buf_size, size - pos);
      fread(buf, 1, n, sf);
      fwrite(buf, 1, n, df);
      pos += n;
    }
  }
  fclose(sf);
  fclose(df);
}

Обработки ошибок нет, чтобы код был проще. А iostreams я не люблю. Она переусложнённая , неудобная, и обычно тормозная (по сравнению с stdio).
...
Рейтинг: 0 / 0
Копирование файла с определённого байта
    #39211992
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седовiostreams я не люблю. Она переусложнённая , неудобная, и обычно тормозная (по сравнению с stdio).
В виндовсе тормозная, в линуксе наоборот 18905559
...
Рейтинг: 0 / 0
Копирование файла с определённого байта
    #39214777
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, всё получилось.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Копирование файла с определённого байта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]