Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Villiya
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 35
#1

c#/с++ работа с файлом

22.05.2010, 18:46. Просмотров 1106. Ответов 5
Метки нет (Все метки)

уважаемые программисты, помогите пожалуйста,подскажите как такая работа с файлом будет выглядеть на C#??? у меня есть данные такого типа
C#
1
2
3
4
5
6
7
8
public string file_name;//Имя файла с роликом.           
            public double FPS;//Частота кадров.
            public double cur_time;//Текущее время.
            public byte[] pCurrent;//Текущее состояние.
            public char[] data_name = new char[20];//Описание данных.
            public double[] data_size = new double[3];//Размеры даных (размеры трёхмерного объекта по X, Y, Z).
            public double[] value = new double[2];//Границы данных (минимальное и минимальное значение).
            public int[] frame_size = new int[3];//Размер одного фрейма (количество ячеек по X, Y, Z).
их нужно считать из файла с именем file_source, на с++ это выглядит так, но как сделать тоже самое на C# даже не могу себе представить!!!
если просто считать текст или простенький массив - это одно, но когда столько разнотипных данных....
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
 
            public bool LoadHeade()
            {
 
                  if(!file_source.Open(file_name, CFile::modeRead | CFile::typeBinary))
                  {                
                MessageBox.Show("Unable to open file for reading");
                return false;
                    }
               FileStream file_source = new FileStream("1.txt", FileMode.Open, FileAccess.Read);
                
                   //Считываем из файла информацию о данных (начало файла).
                file_source.Read(data_size,0,3);
                   file_source.Read(&FPS, sizeof(double));
                   file_source.Read(data_name, 20*sizeof(char));
                file_source.Read(data_size, 3*sizeof(double));
                    file_source.Read(value, 2*sizeof(double));
                    file_source.Read(frame_size, 3*sizeof(int));
               file_source.Close();
                   if(pCurrent != 0) delete[] pCurrent;
                   pCurrent = new BYTE[FrameSize()];
                //-Считываем из файла информацию о данных (начало файла).
                return true;
            }
и к это му же как в этот файл записать данные?
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
 public bool SaveHeade()
            {
                //**Формирование имени файла.
                 DateTime time = DateTime.Now;
                    string strTime = time.ToString(dateFormate);                                    
              file_name = _T("calc") + strTime + _T(".mf1");
                //**-Формирование имени файла.
            
              TRACE("Filename : %s\n",file_name);
               if(!file_source.Open(file_name,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary,&ex))
               {        
                    MessageBox.Show("Unable to open file for writing");
                    return false;
              }
 
                //Записываем в файл информацию о данных (начало файла).
            file_source.Write(&FPS, sizeof(double));
              file_source.Write(data_name, 20*sizeof(char));
               file_source.Write(data_size, 3*sizeof(double));
               file_source.Write(value, 2*sizeof(double));
               file_source.Write(frame_size, 3*sizeof(int));
                //-Записываем в файл информацию о данных (начало файла).
                return true;
            }
 
            public bool SaveFrame()
            {
               file_source.Write(&cur_time, sizeof(double));
              file_source.Write(pCurrent, FrameSize());
                return true;
            }
помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2010, 18:46
Ответы с готовыми решениями:

Работа с файлом
Добрый Вечер! Уважаемые!! У меня проблема: У меня есть массив string который...

Работа с текстовым файлом
В той теме решил не флудить более, а создать свою. Вопрос вот в чем: как...

Работа с текстовым файлом
записываю через StreamWriter данные в текстовый файл (одно слово в каждую...

Работа с файлом в потоке
Приветствую! Пытаюсь перегнать xml файл из потока в массив байтов ...

Работа с файлом txt
Вопрос следующий. Есть файл тхт 25 Гб, нужно считать все строки. Но все зразу...

5
m0nax
1203 / 908 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
22.05.2010, 19:50 #2
эти данные в каком-то классе наверно находятся? (очевидно да)
вот возьми объект этого класса и...
перед описанием класса добавь атрибут
C#
1
2
3
[Serializable]
class you_class_Name
{ ..... }
потом сохранение в файл выглядит так
C#
1
2
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(File.Create("fileName"), OBJECT_YOU_CLASS);
и обратный процесс
C#
1
OBJECT_YOU_CLASS = (you_class_Name)formatter.Deserialize(File.OpenRead("fileName"));
пространства имен для этого дела
C#
1
2
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
с таким подходом сохраняются все данные класса, после восстановления из файла (Deserialize) будет точная копия того объекта который сохраняли
1
Villiya
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 35
22.05.2010, 21:04  [ТС] #3
извиняюсь за глупый вопрос, а OBJECT_YOU_CLASS - это то что мне нужно считать или записать в файл?

Добавлено через 2 минуты
Цитата Сообщение от m0nax Посмотреть сообщение
C#
1
2
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(File.Create("fileName"), OBJECT_YOU_CLASS);
и обратный процесс
C#
1
OBJECT_YOU_CLASS = (you_class_Name)formatter.Deserialize(File.OpenRead("fileName"));
извиняюсь за глупый вопрос, а OBJECT_YOU_CLASS - это то что мне нужно считать или записать в файл?

Добавлено через 2 минуты
и где тогда используются FileStream, StreamReader/StreamWriter?
0
m0nax
1203 / 908 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
22.05.2010, 22:14 #4
это то, что надо записать в первом случае
во втором это то, куда надо вычитать

стримы используется в File.Create("fileName") и File.OpenRead("fileName") который как раз возвращает поток...
можно это развернуть в нормальный вид, просто так короче

Добавлено через 25 минут
это конечно не так просто понять по началу, зато это очень удобная штука
вот пример небольшой
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
    [Serializable]
    class SomeClass
    {
        public int x, y, z;
        public int[] mas1 = { 1, 2, 3, 4, 5 };
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            SomeClass obj = new SomeClass(); //некий класс
            BinaryFormatter binF = new BinaryFormatter();
 
            obj.x = 100;
            obj.y = 200; //какие-то данные, не важно количество и их тип
            obj.z = 300;
            Console.WriteLine("перед сохранением : " + obj.x + " " + obj.y + " " + obj.z);
 
 
            FileStream streamWrite = new FileStream("file.dat", FileMode.Create);//создали файл
            binF.Serialize(streamWrite, obj); //сохранили сразу весь объект
            streamWrite.Close();
 
 
            obj.x = 999;
            obj.y = 999;//изменили некие данные
            obj.z = 999;
            Console.WriteLine("после изменений : " + obj.x + " " + obj.y + " " + obj.z);
 
 
            FileStream streamRead = new FileStream("file.dat", FileMode.Open);   //открыли файл        
            obj = (SomeClass)binF.Deserialize(streamRead); //прочитали сразу весь объект 
            streamRead.Close();
 
            Console.WriteLine("после восстановления из файла : " + obj.x + " " + obj.y + " " + obj.z);
 
            Console.ReadLine();
}
}
1
Villiya
0 / 0 / 0
Регистрация: 13.01.2010
Сообщений: 35
22.05.2010, 22:46  [ТС] #5
спасибо ОГРОМНОЕ!!!!!!!!!!!!!!!!!ты нереально помог!!!!!!!!!!!!!!спасибо!!!!!

Добавлено через 20 минут
в догонку еще вопрос: когда считываю массив как указать его размер? пишу так
C#
1
double[] data_size = (double[3])formatter.Deserialize(file_source);
- ругается, а если так
C#
1
double[] data_size = (double[])formatter.Deserialize(file_source);
то вроде нормально, или размер вобще не нужно указывать?
0
m0nax
1203 / 908 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
23.05.2010, 00:47 #6
ндаа...все запущено ))
Serialize сохраняет ВЕСЬ КЛАСС, абсолютно ВЕСЬ КЛАСС, со всем содержимым, со всеми массивами, всеми полями и всеми другими классами которые в него включаются

Deserialize восстанавливает ВЕСЬ КЛАСС, асолютно весь, со всеми его массивами, полями, свойствами и всеми другими классами которые в него включаются

я не знаю как еще обьяснить...из меня педагог никакой, это простейший способ сохранения, 2 строки на запись, 2 на чтение независимо от кол-во данных

если ничего не понятно, то жди когда кто нить перепишет весь код из первого поста на С#, мне лень это делать...
0
23.05.2010, 00:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2010, 00:47

Работа с txt файлом!
Всем Привет... Очень нужна Ваша помощь или совет, как до реализовать метод.....

Работа с XML - файлом
Необходимо считывать данную структуру XML-файла для дальнейшей работы с ней, а...

Работа с файлом Excel
Здравствуйте! Есть файл с таблицами Excel. Подскажите, как мне получить доступ...


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

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

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