0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 8
1

Бинарный файл, созданный одним приложением, не читается другим приложением

06.09.2014, 10:23. Показов 1463. Ответов 8
Метки нет (Все метки)

Добрый день. Проблема: Первое приложение создает List<MyClass> и сериализует в бинарный файл. Другое приложение, использующее MyClass, этот файл не читает. Заранее благодарен за совет.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2014, 10:23
Ответы с готовыми решениями:

Прочитать файл, зашифрованный другим приложением
доброго все утра. Разрабатываю приложение связывания и форматирования данных с другим приложением....

Значение, возвращаемое приложением должно быть "увидено" другим приложением
Всем привет. Подскажите пожалуйста, как после определённого события, к примеру, при нажатии на...

Как очистить файл, который используется другим приложением?
Подскажите, как очистить файл который используется каким-то приложением?

Создаю UPDATER, в program.cs, но выдает ошибку "файл занят другим приложением"
В файле program.cs, то есть перед запуском проги делаю проверку. ...

8
Эксперт .NET
5341 / 4133 / 1187
Регистрация: 12.10.2013
Сообщений: 11,986
Записей в блоге: 2
06.09.2014, 10:30 2
Цитата Сообщение от Blackadder Посмотреть сообщение
Заранее благодарен за совет.
Blackadder, чтобы советовать, нужен код. Покажите как делаете.
0
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 8
06.09.2014, 11:47  [ТС] 3
Первое приложение:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace ConsoleClassWriter
{
    [Serializable]
    public class Person
    {
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public string name;
        public int age;
    }
 
    [Serializable]
    public class Container
    {
        public const string filename = "data.dt";
        public List<Person> list = new List<Person>();
 
        public void SaveFile()
        {
            using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, list);
            }
        }
        public void OpenFile()
        {
            try
            {
                using (FileStream fs = new FileStream(filename, FileMode.Open))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    list = (List<Person>)bf.Deserialize(fs);
                }
            }
            catch { Console.WriteLine("Can not open file"); }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Container c = new Container();
            c.list.AddRange(new Person[] { new Person("Petya", 20), new Person("Vasya", 22), new Person("Katya", 18) });
            c.SaveFile();
        }
    }
}
Второе приложение:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
 
namespace ConsoleClassReader
{
    [Serializable]
    public class Person
    {      
        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public string name;
        public int age;
    }
 
    [Serializable]
    public class Container
    {
        public const string filename = "data.dt";
        public List<Person> list = new List<Person>();
 
        public void SaveFile()
        {
            using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, list);
            }
        }
        public void OpenFile()
        {
            try
            {
                using (FileStream fs = new FileStream(filename, FileMode.Open))
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    list = (List<Person>)bf.Deserialize(fs);
                }
            }
            catch { Console.WriteLine("Can not open file"); }
        }
    }
 
    class Program
    {        
        static void Main(string[] args)
        {
            Container c = new Container();
        
            c.OpenFile();
            for (int i = 0; i < c.list.Count; i++ )
            {
                Console.WriteLine("{0} {1}", c.list[i].name, c.list[i].age);
            }
            Console.ReadKey();
        }
    }
}
Добавлено через 1 минуту
Думал, может необходимо подробно описывать сериализацию, реализуя интерфейс ISerialisable, но не помогло...
0
87 / 87 / 36
Регистрация: 27.11.2011
Сообщений: 713
06.09.2014, 12:00 4
Blackadder, у тебя проекты лежат в разных папках твой бинарник создается в 1 проекте в папке debug ,укажи полный путь к файлу
0
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 8
06.09.2014, 12:59  [ТС] 5
Это лишь пример. Файл, создаваемый в первом приложении, я вручную копирую в папку второго. Тем не менее, он не читается.

Добавлено через 4 минуты
Поменял в обоих проектах путь к файлу:
public const string filename = @"c:\sharp_proj\data.dt";
Эффекта нет.
0
87 / 87 / 36
Регистрация: 27.11.2011
Сообщений: 713
06.09.2014, 13:01 6
Blackadder, а какая ошибка вылетает
0
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 8
06.09.2014, 13:14  [ТС] 7
Необработанное исключение типа "System.Runtime.Serialization.SerializationException" в mscorlib.dll

Дополнительные сведения: Не удалось найти сборку "ConsoleClassWriter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null".

Добавлено через 8 минут
Получается, что второе приложение должно как-то знать о существовании первого. Одного переноса класса, сохраняющегося в файле, во второе приложение для загрузки файла недостаточно?
0
87 / 87 / 36
Регистрация: 27.11.2011
Сообщений: 713
06.09.2014, 13:40 8
Лучший ответ Сообщение было отмечено Blackadder как решение

Решение

Blackadder, дови проект думаю разберешься
Вложения
Тип файла: rar Serial.rar (77.1 Кб, 16 просмотров)
1
0 / 0 / 0
Регистрация: 06.09.2014
Сообщений: 8
06.09.2014, 14:58  [ТС] 9
Большое спасибо, все работает!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2014, 14:58

Обмен данными между веб-приложением (Flask) и графическим приложением (PyQt5) (Python3.7)
С помощью каких библиотек (модулей) и каким образом можно реализовать сервер на базе графического...

Управление другим приложением!
Есть приложение (простенькая старенькая любимая игра без исходников). НЕ ПУТАТЬ С БОТОВОДСТВОМ! ...

Управление другим приложением
Добрый день. Не могу никак разобраться. У программы которой хочу управлять знаю все с помощью...

Связь с другим приложением
Здравствуйте! Подскажите, пожалуйста, по следующему вопросу: Есть обычное приложение на C#....

Управление другим приложением
Допустим, мы имеем простое оконное приложение А, которое имеет падающее меню со списком цифр от 1...

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


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

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

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