Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320

Читать большой файл байтами и записывать в другой

06.02.2012, 18:35. Показов 5278. Ответов 12
Метки нет (Все метки)

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

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                    FileStream w1 = new FileStream(per1, FileMode.Open);
                    byte c;
                    while (w1.ReadByte() != -1)
                    {
                        c = (byte)w1.ReadByte();             
                        buf1[index] = c;
                        index = index + 1;
                        if (index == max)
                        {
                            //буфер переполнен - тогда записать в файл
                            ТоФайл();
                            index = 0;
                        }
                    }
                    MessageBox.Show(index.ToString());
                    w1.Close();


я пример не весь выложил тока часть чтения
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2012, 18:35
Ответы с готовыми решениями:

PLINQ: Читать файл, каждую строку преобразовывать и записывать преобразованную строку в другой файл
есть простая задача: читать файл, каждую строку преобразовывать и записывать преобразованную строку в другой файл. строки достаточно...

Как читать и записывать файл
Записал в файл миллион строк (числа от 1 до миллиона), построчное чтение при указании конкретной строки № 900 тыс. занимает 0,2 сек, что...

Как читать и записывать в текстовый файл из ресурсов?
записываю в обычный файл вот так StreamWriter input = new StreamWriter("data.txt"); ...

12
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.02.2012, 19:04
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string pathIn = @"f:\RoslynSetup0.exe",
       pathOut = @"f:\r.0";
 
using ( var fileIn  = File.Open( pathIn, FileMode.Open, FileAccess.Read ) )
using ( var fileOut = File.Open( pathOut, FileMode.Create, FileAccess.Write ) )
{
    var  buff   = new byte[4 * 1024 * 1024]; // 4 MB buffer
    int  readed = 0;
    bool flag;
 
    do
    {
        flag = (readed = fileIn.Read( buff, 0, buff.Length )) >= buff.Length;
        fileOut.Write( buff, 0, readed );
    } while ( flag );
}
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 19:20  [ТС]
за пример канечно спасибо но уменя предпологаеться обработка массива, мне ваш метод не подъходит. подскажите как просто прочитать в переменную байт из файла:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  var
 c: byte;
f: file of byte;
begin
 assignfile(f, 'd:\1.bin');
 if not fileexist('d:\1.bin') then 
 exit;
reset(f);
while not eof(f) do 
 read(f, c);
begin
 
end;
closefile(f);
end;
не смог отбразить мысль но аналог на дельфи такой
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.02.2012, 19:41
C#
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
string pathIn = @"...",
       pathOut = @"...";
 
using ( var fileIn  = File.Open( pathIn, FileMode.Open, FileAccess.Read ) )
using ( var fileOut = File.Open( pathOut, FileMode.Create, FileAccess.Write ) )
{
    int    bufferReadSize = 4 * 1024 * 1024;         // Количество читаемых байт
    byte[] buff           = new byte[fileIn.Length]; // Нежелательно, если файл будет очень большим
    int    offset         = 0;
 
    // Чтение всего файла в buff
    do
    {
        if ( (offset + bufferReadSize) > buff.Length )
            bufferReadSize = buff.Length - offset;
 
        offset += fileIn.Read( buff, offset, bufferReadSize );
    } while ( offset < buff.Length );
 
    //
    // Работаете с буфером buff
    //
 
    fileOut.Write( buff, 0, buff.Length );
}
Читать большие файлы методом ReadByte() нерекомендуется, т.к. очень сильно падает производительность. Читаете в буфер > Работает с буфером > Пишите буфер в файл или т.п.
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 19:46  [ТС]
мне недостаточно знаний чтобы понять пару слов в начале. т.к. тока перешол недавно на шарн. я использую стандартные классы типо: FileStreem, тока там помоему нет метода для чтения одного байта я прав?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.02.2012, 19:50
n971030, читаем внимательно это, там описано что и почему возвращает FileStream.ReadByte().

И не надо полностью цитировать мои сообщения...
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 20:41  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
n971030, чи

И не надо полностью цитировать мои сообщения...
СПАСИБО! помогло ! эксперементальная часть такая
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
                    FileStream nf = new FileStream(per1, FileMode.Open);
                    BinaryReader n = new BinaryReader(nf);
                    byte c;
 
                    while (nf.ReadByte() != -1)
                    {
                        c = n.ReadByte();
                        buf1[index] = c;:drink:
                        index += 1;
                        if (index == max)
                        {
                            ТоФайл();
                            index = 0;
                        }
 
                    }
                    n.Close();
 
                    nf.Close();
Добавлено через 36 минут
Цитата Сообщение от SSTREGG Посмотреть сообщение
n971030, читаем внимательно это, там описано что и почему возвращает FileStream.ReadByte().

И не надо полностью цитировать мои сообщения...
код вылетает как проверить достидение конца файла? метод Peek найти не могу
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  FileStream nf = new FileStream(per1, FileMode.Open);
                    BinaryReader n = new BinaryReader(nf);
                    byte c;
                    while ((c = n.ReadByte()) != null)
                    {
                        //c = n.ReadByte();
              
                        buf1[index] = c;
                        index += 1;
                        if (index == max)
                        {
                            ТоФайл();
                            index = 0;
                        }
                    }
                    n.Close();
                    nf.Close();
строка 5 мозги пудрит.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.02.2012, 20:48
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FileStream nf = new FileStream( per1, FileMode.Open );
BinaryReader n = new BinaryReader( nf );
byte c;
while ( nf.Position < nf.Length )
{
    buf1[index] = n.ReadByte();
    index++;
    if ( index == max )
    {
        ТоФайл();
        index = 0;
    }
}
 
n.Close(); // nf.Close() не надо, т.к. n.Close() "Закрывает текущий поток чтения и связанный с ним базовый поток." [url]http://msdn.microsoft.com/ru-ru/library/system.io.binaryreader.close.aspx[/url]
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 21:03  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
[CSHARP]
Я вставил код и что то не читает ничего или оч. медленно или в чем проблемма непонятно
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8726 / 3678 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
06.02.2012, 21:10
Цитата Сообщение от n971030 Посмотреть сообщение
Я вставил код и что то не читает ничего
Ваш код у меня тоже ничего не читает, точнее он даже не компилируется, надеюсь причины Вам объяснять не надо... Рабочий код я предоставлял в постах #2 и #4.
Цитата Сообщение от n971030 Посмотреть сообщение
или оч. медленно
Цитата Сообщение от SSTREGG Посмотреть сообщение
Читать большие файлы методом ReadByte() нерекомендуется, т.к. очень сильно падает производительность. Читаете в буфер > Работаете с буфером > Пишите буфер в файл или т.п.
1
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 21:14  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Ваш код у меня тоже ничего не читает, точнее он даже не компилируется, надеюсь причины Вам объяснять не надо... Рабочий код я предоставлял в постах #2 и #4.
у меня среда VS2008 С#

я до этого момента он у меня читал оч. бфстро 25 метров в сек. (пред код тока ошибка вылетала)

Добавлено через 1 минуту
пока эксперементальный листинг такой
C#
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace Обьеденение_файлов
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        int max = 8*1024*1024; // 30МБ 
        byte[] buf1;
        int index = 0;
 
        void ТоФайл()
        {
            //весь каталог прочитан и буфер заполнен! его надо записать в файл
            const string namf = "Date.cab";
            if (File.Exists(namf) == true) ;
            FileStream e2;
            e2 = new FileStream(namf, FileMode.Append, FileAccess.Write);
            e2.Write(buf1, 0, index);
            e2.Flush();
            e2.Close();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            buf1 = new byte[max];
 
            //читаем список файлов
            const string file = "catalog.txt";
            if (File.Exists(file) == false)
            {
                return;
            }
            StreamReader text1 = new StreamReader(file);
            string per1;
            while ((per1 = text1.ReadLine()) != null)
            {
                if (File.Exists(per1))
                {
                    FileStream nf = new FileStream(per1, FileMode.Open);
                    BinaryReader n = new BinaryReader(nf);
                    //byte c;
                    int x = 0;
                    
                    while (nf.Position <= nf.Length)
                    {
                        x++;
                        label1.Text = ToString();
                       
              
                        buf1[inadex] = n.ReadByte();
                        index ++;
                        if (index == max)
                        {
                            ТоФайл();
                            index = 0;
                        }
                    }
                    n.Close();
                    nf.Close();
 
 
                }
            }
            text1.Close();
            MessageBox.Show("OK");
 
        }
    }
}
0
188 / 120 / 4
Регистрация: 23.01.2010
Сообщений: 1,320
06.02.2012, 21:34  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
Ваш код у меня тоже ничего не читает, точнее он даже не компилируется, надеюсь причины Вам объяснять не надо... Рабочий код я предоставлял в постах #2 и #4.
nf.length; она вообще тормозная запись до крайности!!!
0
11 / 11 / 1
Регистрация: 22.12.2012
Сообщений: 508
08.04.2013, 21:51
Цитата Сообщение от n971030 Посмотреть сообщение
if (File.Exists(namf) == true) ;
точка с запятой после ифа???
КРУТО!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2013, 21:51
Помогаю со студенческими работами здесь

Как читать и записывать данные в файл Excel ?
Доброго времени суток! Подскажите как считывать данные из excel файла и в процессе работы вносить изменения в него. Нужно чтобы после ввода...

Как читать и записывать данные в файл в Инете?
Как читать и записывать данные в файл в Инете?

Как правильно открывать файл и записывать/читать из него
Как правильно открывать файл и записывать/читать из него? На разных сайтах и учебниках есть различные примеры етого но везде разные ...

Файловые операции: генерировать файл, читать, редактировать, записывать
Попалось задание на заочке, немного не представляю, как его сделать на плюсах (тем более чтобы работало на Borland C++ 5). Кто может...

Как читать и изменять (записывать) файл .txt на хостинге (сайте) ?
С помощью WinInet или очень лёгкой библиотеки. Заранее спасибо за рабочий пример кода !


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru