Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
.NET 2.x

Копируемые файлы склеиваются в один

25.02.2015, 18:15. Показов 540. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Копирование файлов, использования потока, и ошибка склеиваеться в один файл
Пытался Копировать не один файл , а несколько
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
//////////////Write Dir////////////// 
                int Readbyte = 0;
                int Writebyte = 0;
                int BUFF = 20000;
                byte[] buffer = new byte[BUFF];
                long iteration = 0, size_file = 0; 
                               
                DirectoryInfo temps=new DirectoryInfo("tmp");
                FileInfo puti_new = null;
                FileInfo[] All_file = temps.GetFiles("*.*",SearchOption.AllDirectories);
                string puti_new_bin = "";
 
                for (int k=0;k<All_file.Length;k++)
                {
                    /////Creat Dir/////
                    puti_new_bin = All_file[k].FullName.Replace(temps.FullName,bin);
                    puti_new = new FileInfo(puti_new_bin);
                    DirectoryInfo creat_d=new DirectoryInfo(puti_new.Directory.FullName);
 
                    if (creat_d.Exists==false)
                    {
                        creat_d.Create();
                    }
                    ////////////////////
                    FileStream[] file_stream_old = new FileStream[All_file.Length];
                    FileStream[] file_stream_new = new FileStream[All_file.Length];
                    using (file_stream_old[k] = new FileStream(All_file[k].FullName, FileMode.Open))
                    {
                        Readbyte = file_stream_old[k].Read(buffer, 0, buffer.Length);
                        size_file = file_stream_old[k].Length;
                        using (file_stream_new[k] = new FileStream(creat_d + "\\" + All_file[k].Name, FileMode.CreateNew))
                        {
                            for (int j = 0; j < buffer.Length; j++)
                            {
                                if (Readbyte == 0)
                                {
                                    break;
                                }
 
                                iteration = (size_file / buffer.Length);
 
 
                                file_stream_new[k].Write(buffer, 0, Readbyte);
 
                            }
                        }
                    }
}
Получилось все файлы склеелись в один файл
Как же сделать так чтоб каждый копировался
а не склеивались в один ? :black_eye.:
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2015, 18:15
Ответы с готовыми решениями:

Как контролировать файлы копируемые в каталог сборки
Я знаю что в .NET проекте есть ссылки на сторонние сборки, в свойствах этих сборок можно разрешить или запретить копировать локально версию...

Сервер получает файлы от клиента, склеивает все полученные файлы в один большой. Протокол взаимодействия UDP
Дали задание, надеюсь на вашу помощь или быть может есть какие-то исходники, буду рад любой помощи. Заранее спасибо. Задание: Реализовать...

Склеиваются сокеты
Клиент посылает сокеты серверу. screenwindow := TCanvas.Create; screenwindow.Handle := GetDC(0); for i := 1 to Screen.width do ...

5
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
25.02.2015, 21:07
А вам точно нужно заново изобретать велосипед?
C#
1
2
3
4
5
            FileInfo[] allFile = temps.GetFiles("*.*", SearchOption.AllDirectories);
            foreach (var file in allFile)
            {
                file.CopyTo(file.FullName.Replace(temps.FullName, bin));
            }
Добавлено через 12 минут
Кстати, что такое bin? У вас он нигде не меняется, поэтому и пишет всегда в один файл. Если я правильно понял bin - папка в которую нужно копировать.
C#
1
2
3
4
5
6
            Directory.CreateDirectory(bin);
            FileInfo[] allFile = temps.GetFiles("*.*", SearchOption.AllDirectories);
            foreach (var file in allFile)
            {
                file.CopyTo(Path.Combine(bin, file.Name));
            }
P.S. Мой код выше нерабочий.
1
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
26.02.2015, 01:05  [ТС]
Этот вилосипед мне нужен для прогресса

C#
1
2
3
label4.Text = "Прогресс общий: " + (j * 100) / (int)iteration+ " %";
                       progressBar1.Maximum = (int)iteration;
                        progressBar1.Value = j/(int)iteration;
Так что готовый велик мне не надо
мне надо велик оснощен торпедами против москитов , и полосами 100% наводкой прогресса

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

вот примерно так масивом копирует файлы
C#
1
Copy_progress(All_file[k].FullName, creat_d + "\\" + All_file[k].Name);
Но проблема в том , что буфер я задаю например число
BUFF = 1024
Да капируеться но файл он не соотвествует оригиналу файла
а если буфер поставлю BUFF = (int)size_file;
размеру файла то прогресс перестает показываться
и полоса не работает
но файл соотвествует оригиналу

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
public void Copy_progress(string file_old,string file_new)
        {
            int Readbyte = 0, Readbyte_plus=0;
 
            int Writebyte = 0;
            int BUFF = 1024;
            
            long iteration = 0, size_file = 0;
            using (FileStream file_streeam = new FileStream(file_old, FileMode.Open,FileAccess.ReadWrite))
            {
 
                size_file = file_streeam.Length;
                //BUFF = (int)size_file;
                byte[] buffer = new byte[BUFF];
                Readbyte = file_streeam.Read(buffer, 0, buffer.Length);
                Thread.Sleep(2000);
 
                using (FileStream file_straeam_write = new FileStream(file_new, FileMode.Create, FileAccess.ReadWrite))
                {
                    
 
                    for (int j = 0; j < (int)size_file / Readbyte; j++)
                    {
                        
                        
 
                        if (Readbyte == 0)
                        {
 
                            break;
                        }
 
                        label4.Text = "Прогресс общий: " + (j * 100) / ((int)size_file / Readbyte) + " %";                        
                        
                        progressBar1.Maximum = ((int) size_file/Readbyte);
                        progressBar1.Value = j/((int) size_file/Readbyte);
                        
 
                        file_straeam_write.Write(buffer, 0, Readbyte);
 
                    }
                }
            }
        }
И как решить ?
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
26.02.2015, 03:31
Так?
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
        public void CopyWithProgressBar(string fileOld, string fileNew)
        {
            FileStream reader = new FileStream(fileOld, FileMode.Open, FileAccess.Read); ;
            FileStream writer = new FileStream(fileNew, FileMode.Create, FileAccess.Write);
 
            int bufferSize = 10000; //размер буфера
            long fileSize = reader.Length; //размер файла
            byte[] buffer = new byte[bufferSize];
            long bytesToRead = (int)fileSize; //осталось прочесть
            long bytesRead = 0; //прочтено
 
            try
            {
                while (bytesToRead > 0)
                {
                    if (bytesToRead < bufferSize)
                        bufferSize = (int)bytesToRead;
                    int readed = reader.Read(buffer,0,bufferSize);
                    if (readed == 0)
                        break;
                    bytesRead += readed;
                    bytesToRead -= readed;
                    writer.Write(buffer, 0, bufferSize);
 
                    progressBar1.Value = (int)(100 * bytesRead / fileSize);
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                reader.Close();
                writer.Close();
            }
        }
0
 Аватар для GENDALF_ISTARI
16 / 33 / 19
Регистрация: 20.08.2013
Сообщений: 740
26.02.2015, 13:59  [ТС]
Шас проверю ))))))))))

Добавлено через 1 час 14 минут
Спасибо код работает

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
public void Copy_progress(string file_old,string file_new)
        {
            FileStream reader = new FileStream(file_old, FileMode.Open, FileAccess.Read); ;
            FileStream writer = new FileStream(file_new, FileMode.Create, FileAccess.Write);
 
            int bufferSize = 10000; //размер буфера
            long fileSize = reader.Length; //размер файла
            byte[] buffer = new byte[bufferSize];
            long bytesToRead = (int)fileSize; //осталось прочесть
            long bytesRead = 0; //прочтено
            
            try
            {
 
                
                progressBar1.Maximum = (int)fileSize;
                while (bytesToRead > 0)
                {
                    
                    if (bytesToRead < bufferSize)
                        bufferSize = (int)bytesToRead;
                    int readed = reader.Read(buffer, 0, bufferSize);
                    if (readed == 0)
                        break;
                    bytesRead += readed;
                    bytesToRead -= readed;
                    writer.Write(buffer, 0, bufferSize);
                    label4.Text = "Прогресс общий: " + (int) (100*bytesRead/fileSize)+" %";
                    progressBar1.Value = ((int)bytesRead / (int)fileSize);
                    //progressBar1.Update();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                reader.Close();
                writer.Close();
            }
        }
Какой то глюк с полосой progressBar1
не проскакивает полоса ей нету
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
26.02.2015, 18:00
Потому что вы так слелали byteRead/filesize всегда, кроме последней итерации, будет меньше 1, а так как деление целочисленное, то результат "округлиться" до 0. На последней итерации результат будет 1. Максимально значение прогрессбара 100 (по умолчанию), соответственно в конце он покажет 1/100.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2015, 18:00
Помогаю со студенческими работами здесь

Склеиваются несколько команд
Здравствуйте, при отправке сообщений через сокет {клиент} for i:=1 to autorization do begin if ((users.Ip&lt;&gt;s) and...

Не склеиваются блоки сайта с подвалом в CSS
Всем привет! Я до последнего думал, что разберусь сам, но вот что-то не получается. У меня 2 проблемы, одна из них основная: ...

Склеиваются строки вместо сложения чисел
&lt;html&gt; &lt;head&gt; &lt;title&gt;Оценки&lt;/title&gt; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt; &lt;style type=&quot;text/css&quot;&gt; ...

При копировании таблиц они склеиваются в одну?!
Добрый день, столкнулся со следующей проблемой. Стоит задача скопировать таблицы из одного файла word в другой(удаляется таблица из 1го...

В каком файле склеиваются и рендрятся все модули?
Добрый день! Может кто знает где в Joomla 3, склеиваются модули для вывода в браузер? То есть где формируется конечный html отдаваемый...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru