0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22

Соединение двух потоков

16.06.2016, 08:34. Показов 1653. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
using (var cs = new CryptoStream(fs, sa.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Read))
                    cs.Read(buff, 0, buff.Length);
 
using (var fsw = File.Open(fileOut, FileMode.Create, FileAccess.Write))
                {
                    fsw.Write(buff, 0, buff.Length);
                    fsw.Flush();
                }
Можно ли провести эту операцию без использования массива, не хранить файл в памяти. Используя возможно как-то cs.CopyTo(fsw).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2016, 08:34
Ответы с готовыми решениями:

Синхронизация двух потоков
Здравствуйте, в процессе обучения столкнулся с проблемой: У меня есть класс monitorfolder, который мониторит папку, и при появлении в ней...

ArduPilot Mega - программное совмещение двух прошивок через соединение двух ардуин
здравствуйте. есть задача сделать БПЛА-трансформер, летающий в режиме вертолёта и самолёта, но под каждый из видов ЛА существует своя...

Эффективность двух потоков
Написал прогу, которая оценивает эффективность работы по выбору одного или двух потоков. Эффективность оценивается в количестве проведенных...

12
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 08:44
Цитата Сообщение от иван ивановский Посмотреть сообщение
Используя возможно как-то cs.CopyTo(fsw).
Ну, оно так и работает.
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22
16.06.2016, 08:51  [ТС]
Только у меня не получается сделать это с этими двумя потоками.
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 08:52
иван ивановский, компилятор ошибку выдаёт или во время исполнения что-то не так идёт?
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22
16.06.2016, 09:20  [ТС]
'CryptoStream не содержит определения для "CopyTo" и не удалось найти метод расширения "CopyTo", принимающий тип "CryptoStream" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 09:28
иван ивановский, у меня всё работает:

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
using System;
using System.Security.Cryptography;
using System.IO;
 
namespace GeneralExperiments
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var dd = File.Open("adsfadsf", FileMode.Append);
 
            using (var cs = new CryptoStream(dd, null, CryptoStreamMode.Read))
            {
                using (var fsw = File.Open("dasdas", FileMode.Create, FileAccess.Write))
                {
                    cs.CopyTo(fsw);
                }
            }
 
            Console.WriteLine("\nDONE");
            Console.ReadKey();
        }
    }
}
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22
16.06.2016, 09:38  [ТС]
Всё равно выдает туже ошибку.
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 09:40
Целевая версия дотнета, случаем, не 3.5? Нужно 4.0 и выше.
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22
16.06.2016, 09:43  [ТС]
А на 3.5 никак это обойти нельзя?
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 09:45
Цитата Сообщение от иван ивановский Посмотреть сообщение
А на 3.5 никак это обойти нельзя?
Нет, метод CopyTo был представлен в 4.0. Есть какая-то принципиальная проблема не использовать более новую версию дотнета?
0
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 22
16.06.2016, 09:47  [ТС]
Я могу ошибаться, но 4.0 по умолчанию не стоит на Windows 7?
0
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
16.06.2016, 09:51
Да, семёрка тащит с собой .NET Framework 3.5.1.

Неужели это такая проблема включить в поставку твоей программы дистрибутив более свежего дотнета? Ведь даже XP поддерживает 4.0, если его туда поставить.

Но если нет, можешь в цикле читать из одного потока некоторое количество байт и записывать в другой. Но я бы не стал себя ограничивать таким образом без веской на то причины.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.06.2016, 00:22
иван ивановский, а вы уверены, что 3.5 собираетесь поддерживать? Это та еще боль.
CopyTo это только верхушка айсберга нехватающего функционала

Хотя вы всегда можете взять код из самого дотнета и скопировать:
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
                
        public void CopyTo(Stream destination)
        {
            if (destination == null)
                throw new ArgumentNullException("destination");
            if (!CanRead && !CanWrite)
                throw new ObjectDisposedException(null, Environment.GetResourceString("ObjectDisposed_StreamClosed"));
            if (!destination.CanRead && !destination.CanWrite)
                throw new ObjectDisposedException("destination", Environment.GetResourceString("ObjectDisposed_StreamClosed"));
            if (!CanRead)
                throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnreadableStream"));
            if (!destination.CanWrite)
                throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnwritableStream"));
            Contract.EndContractBlock();
 
            InternalCopyTo(destination, _DefaultCopyBufferSize);
        }
 
 
 
        private void InternalCopyTo(Stream destination, int bufferSize)
        {
            Contract.Requires(destination != null);
            Contract.Requires(CanRead);
            Contract.Requires(destination.CanWrite);
            Contract.Requires(bufferSize > 0);
            
            byte[] buffer = new byte[bufferSize];
            int read;
            while ((read = Read(buffer, 0, buffer.Length)) != 0)
                destination.Write(buffer, 0, read);
        }
Контракты можно заменить на выброс соответствующего исключения.
Алсо полезная константа (которая используется как bufferSize):
C#
1
2
3
4
        //We pick a value that is the largest multiple of 4096 that is still smaller than the large object heap threshold (85K).
        // The CopyTo/CopyToAsync buffer is short-lived and is likely to be collected at Gen0, and it offers a significant
        // improvement in Copy performance.
        private const int _DefaultCopyBufferSize = 81920;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2016, 00:22
Помогаю со студенческими работами здесь

Синхронизация двух потоков (мьютексы)
Задание звучит так: В программе порождаются два потока, работающие с одним файлом. Один поток пишет строки в файл, другой считает...

Организация двух потоков в приложении
Ребят не могу допереть у меня есть многопоточное приложение. И в одном из потоков я формирую данные в рекурсии. И надо создать еще 1 поток...

Одновременная рисовка из двух потоков
Доброго времени суток, подскажите пожалуйста. Как можно использовать отрисовку из двух потоков. При компиляции кода ругается. В момент...

Параллельный вывод из двух потоков
Помогите,пожалуйста,создать программу,которая бы запускала в себе 2 потока: один выводит + , другой - В итоге либо в файл, либо в...

Параллельная работа двух потоков
Добрый день ! Подскажите пожалуйста , как сделать так, что-бы один поток считывал строки, а другой считал буквы и слова ? ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru