Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 4
1

Перевести пример из VB.net в C#

08.05.2014, 06:06. Показов 920. Ответов 3
Метки нет (Все метки)

Было бы неплохо, если перевели пример Пакуем разнородное содержимое в один файл и поместили его в FAQ.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2014, 06:06
Ответы с готовыми решениями:

Работа с Excel средствами VB.net. Как перевести код из VBA в VB.net?
Коллеги, добрый день! Нужна помощь! В свое время был написан макрос для Excel, но прошло и...

Запись звука в .NET - как перевести на vb.net c языка C++
Можно ли этот код: Запись звука в .NET перевести на vb.net ? Может кто-то уже переводил или писал...

Перевести проект C# в VB.NET.net
Доброго времени суток. Пытаюсь перевести проект с C# в vb.net. Знаю, что есть конвертеры. в инете...

Нужно перевести пример в программу
Сам пример: Моя попытка но выдает ошибку : k = powf(45.7, -1.0 / 4)*sinf(2)+ powf((tanhf(1) /...

3
Администратор
Эксперт .NET
13855 / 11228 / 4570
Регистрация: 17.03.2014
Сообщений: 22,635
Записей в блоге: 1
08.05.2014, 07:52 2
LaWrik, используй лучше класс ZipArchive, если у тебя .NET 4.5, или классы из System.IO.Packaging.
1
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 4
08.05.2014, 11:14  [ТС] 3
Спасибо за совет. Но мне пока интересней что в том проекте и ни как не получается сделать так что бы читалась картинка.
0
Администратор
Эксперт .NET
13855 / 11228 / 4570
Регистрация: 17.03.2014
Сообщений: 22,635
Записей в блоге: 1
16.05.2014, 01:42 4
Лучший ответ Сообщение было отмечено LaWrik как решение

Решение

LaWrik, если тебя все еще интересует этот вопрос, то смотри пример класса для упаковки (не архивирования) файлов в один общий файл. Класс позволяет упаковать несколько файлов в один сохраняя при этом их имена. Каталоги внутри упакованного файла (как в архиваторах) не поддерживаются. Должен работать со любыми файлами.

Код который привел Памирыч потенциально подвержен ошибкам т.к. трактует файлы как текстовые и полагается на строковый разделитель чтобы провести границы между файлами. Так как мы пишем общее решение, то файлы следует трактовать как бинарные. Класс Packager именно так и поступает. Чтобы знать где проходят границы между файлами используется простая "файловая система" в которой записывается его имя и длина. При желании можно добавить каталоги и дополнительные метаданные.

Класс Packager
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
public static class Packager
{
    public static void Pack(string packageFileName, IList<string> inputFiles)
    {
        bool completed = false;
        FileStream packageStream = null;
        BinaryWriter packageWriter = null;
        try
        {
            packageStream = new FileStream(packageFileName, FileMode.Create, FileAccess.Write, FileShare.None);
            packageWriter = new BinaryWriter(packageStream);
 
            // Резервируем место для смещения на список файлоа
            packageWriter.Write(0L);
 
            // Записываем содержимое файлов
            long totalSize = 0;
            PackagedFile[] packageFiles = new PackagedFile[inputFiles.Count];
            for (int i = 0; i < inputFiles.Count; i++)
            {
                string inputFile = inputFiles[i];
                FileInfo inputFileInfo = new FileInfo(inputFile);
                if (!inputFileInfo.Exists)
                {
                    throw new FileNotFoundException("File not found", inputFile);
                }
 
                packageFiles[i] = new PackagedFile { Name = inputFileInfo.Name, Size = inputFileInfo.Length };
                totalSize += inputFileInfo.Length;
 
                using (var inputStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    inputStream.CopyTo(packageStream);
                }
            }
 
            // Записываем список файлов
            var formatter = new BinaryFormatter();
            formatter.Serialize(packageStream, packageFiles);
 
            // Записываем смещение
            packageStream.Position = 0;
            packageWriter.Write(totalSize + sizeof(long));
 
            completed = true;
        }
        finally
        {
            if (packageStream != null)
            {
                packageStream.Close();
                packageStream = null;
 
                if (packageWriter != null)
                {
                    packageWriter.Close();
                    packageWriter = null;
                }
 
                if (!completed)
                {
                    File.Delete(packageFileName);
                }
            }
        }
    }
 
    public static void Unpack(string packageFileName, string destinationFolder, string fileName = null)
    {
        if (packageFileName == null) throw new ArgumentNullException("packageFileName");
        if (destinationFolder == null) throw new ArgumentNullException("destinationFolder");
 
        using (var packageStream = new FileStream(packageFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
        using (var packageReader = new BinaryReader(packageStream))
        {
            packageStream.Position = packageReader.ReadInt64();
 
            var formatter = new BinaryFormatter();
            PackagedFile[] packageFiles = (PackagedFile[])formatter.Deserialize(packageStream);
 
            packageStream.Position = sizeof(long);
 
            const int bufferSize = 70 * 1024;
            byte[] buffer = new byte[bufferSize];
 
            if (fileName == null)
            {
                // Распаковываем полностью
                foreach (PackagedFile pf in packageFiles)
                {
                    string outputFileName = Path.Combine(destinationFolder, pf.Name);
                    WriteFile(outputFileName, packageStream, pf.Size, buffer);
                }
            }
            else
            {
                // Распаковываем только один указанный файл
                bool found = false;
                for (int i=0; i<packageFiles.Length; i++)
                {
                    PackagedFile pf = packageFiles[i];
 
                    if (!pf.Name.Equals(fileName, StringComparison.OrdinalIgnoreCase))
                    {
                        packageStream.Seek(pf.Size, SeekOrigin.Current);
                        continue;
                    }
 
                    string outputFileName = Path.Combine(destinationFolder, pf.Name);
                    WriteFile(outputFileName, packageStream, pf.Size, buffer);
 
                    found = true;
                    break;
                }
 
                if (!found)
                {
                    throw new FileNotFoundException(String.Format("File '{0}' was not found in package '{1}'", fileName, packageFileName), fileName);
                }
            }
        }
 
    }
 
    private static void WriteFile(string fileName, FileStream inputStream, long size, byte[] buffer)
    {
        Debug.Assert(buffer != null);
 
        using (FileStream outputStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
        {
            for (long bytesLeft = size; bytesLeft > 0; )
            {
                int partLength = bytesLeft < buffer.Length ? (int)bytesLeft : buffer.Length;
 
                // TODO - Обработка ошибок
                inputStream.Read(buffer, 0, partLength);
                outputStream.Write(buffer, 0, partLength);
 
                bytesLeft -= partLength;
            }
        }
    }
 
    [Serializable]
    private class PackagedFile
    {
        public string Name;
        public long Size;
    }
}

Пример использования класса:
C#
1
2
3
4
5
6
7
8
9
// Упаковка
Packager.Pack(@"d:\temp\packager\1.pack", new[] { @"D:\591261_original.jpg", @"D:\Владимир Гиляровский. Москва и москвичи.txt", @"D:\menu.js" });
 
// Распаковка всех файлов в указанный каталог
Packager.Unpack(@"d:\temp\packager\1.pack", @"d:\temp\packager");
 
// Распаковка отдельных файлов в указанный каталог
Packager.Unpack(@"d:\temp\packager\1.pack", @"d:\temp\packager", "591261_original.jpg");
Packager.Unpack(@"d:\temp\packager\1.pack", @"d:\temp\packager", "Владимир Гиляровский. Москва и москвичи.txt");
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2014, 01:42

Перевести пример на язык LISP
Помогите перевести пример на язык LISP

Перевести пример в pascal abc
Помогите пожалуйста перевести в pascalabc

Перевести пример кода на PHP
Здравствуйте! Только стал изучать данный язык, никак не могу понять работу с классами. Нужно...

Перевести пример на С++ (Вычислить значение выражения)
Нужно перевести пример из изображения в код на C++ Конкретно задание: 1. Вычислить значение...

Пример управления сервоприводом по протоколу CAN. С С++ перевести на VB
Здравствуйте! Это пример управления сервоприводом по протоколу CAN. В С++ ничего не понимаю....

перевести пример в форму понятную паскалю
помогите перевести этот пример в форму понятную паскалю, знак | после цифры 1 это не модуль, это...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.