11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675

Дозапись в бинарный файл

01.05.2014, 20:00. Показов 2003. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал сервер и клиент. Сделал регистроцию и авторизацию.
Но вот только на сервере в БД можно записать только одного пользователя. Регистрация происходит так:
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
class register
    {
        public NamePass user = new NamePass();
 
        public int registers(string name, string pass)
        {
            user.Name.Add(name);
            user.Pass.Add(pass);
 
            FileStream stream = new FileStream("User.dat", FileMode.OpenOrCreate);
 
            BinaryFormatter binarryFormater = new BinaryFormatter();
            binarryFormater.Serialize(stream, user);
            stream.Close();
            
            return 1;
        }
    }
 
[Serializable]
    public class NamePass
    {
        public List<string> Name = new List<string>();
        public List<string> Pass = new List<string>();
    }
Что сдесь не так? как сделать что-бы все зарегестрированые пользователи находились в файле

Добавлено через 9 минут
Т.е. нужно сделать дозапись в файл
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2014, 20:00
Ответы с готовыми решениями:

Дозапись в файл
После выполнения программы, результат выписывается в текстовый файл. Если же запустить программу ещё раз, предыдущий результат удаляется....

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

Дозапись информации в файл
Здравствуйте. Такая проблема, после нажатия кнопки информация из listbox записывается в файл(txt), но как сделать чтобы информация не...

8
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
01.05.2014, 20:04
Попробуйте обернуть "в using", вот так например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public int registers(string name, string pass)
{
    user.Name.Add(name);
    user.Pass.Add(pass);
 
    using (FileStream stream = new FileStream("User.dat", FileMode.OpenOrCreate))
    {
        BinaryFormatter binarryFormater = new BinaryFormatter();
        binarryFormater.Serialize(stream, user);
    }
    return 1;
}
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
01.05.2014, 20:22  [ТС]
Цитата Сообщение от kmaffa Посмотреть сообщение
Попробуйте обернуть "в using", вот так например:
Нет. Так не работает. Тоже дозаписывает...
Перед добавления данных в список. Вызываю метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public int LoadUser()
        {
            try
            {
                FileStream fs = new FileStream("User.dat", FileMode.Open);
                BinaryFormatter formater = new BinaryFormatter();
                user = (NamePass)formater.Deserialize(fs);
 
                fs.Close();
                return 1;
            }
            catch { return 0; }
        }
И серавно
0
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
01.05.2014, 20:48
Слишком много исправлять в Вашем коде, поэтому немного его преобразовал:
Методы записи в файл и чтения из файла:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Запись в файл
static void SaveAsBinaryFormat(object objGraph, string fileName)
{
    BinaryFormatter binFormat = new BinaryFormatter();
    using (Stream fStream = new FileStream(fileName, FileMode.OpenOrCreate))
    {
        binFormat.Serialize(fStream, objGraph);
    }
}
//Чтение из файла
static ListNamePass LoadFromBinaryFile(string fileName)
{
    BinaryFormatter binFormat = new BinaryFormatter();
    using (Stream fStream = File.OpenRead(fileName))
    {
        return (ListNamePass)binFormat.Deserialize(fStream);
    }
}
Классы для хранения данных будут выглядеть вот таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
[Serializable]
class NamePass
{
    public string Name { get; set; }
    public string Pass { get; set; }
}
[Serializable]
class ListNamePass
{
    public List<NamePass> AllUser =  new List<NamePass>();
}
Пример использования:
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
static void Main(string[] args)
{
    string fileName = "User.dat";
            
    //Объект где все пользователи
    ListNamePass myData = new ListNamePass();
 
    //Добавляем первого пользователя
    NamePass firstUser = new NamePass();
    firstUser.Name = "первый";
    firstUser.Pass = "ksf&32rk";
 
    //Добавляем второго пользователя
    NamePass twoUser = new NamePass();
    twoUser.Name = "второй";
    twoUser.Pass = "lre023msd";
 
    //Добавляем этих пользователей
    myData.AllUser.Add(firstUser);
    myData.AllUser.Add(twoUser);
 
    //Записываем в файл
    SaveAsBinaryFormat(myData,fileName);
 
    //Считываем из файла
    ListNamePass newData = LoadFromBinaryFile(fileName);
 
    foreach (var item in newData.AllUser)
        Console.WriteLine("{0} {1}", item.Name, item.Pass);
}
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18310 / 14234 / 5368
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
01.05.2014, 20:50
Vla00, а ты не забываешь читать данные из файла?

Цитата Сообщение от Vla00 Посмотреть сообщение
C#
1
2
3
4
5
public class NamePass
{
    public List<string> Name = new List<string>();
    public List<string> Pass = new List<string>();
}
Странный подход. Для нового свойства понадобится отдельная коллекция. Получить всю информацию об отдельном пользователе неудобно. Удаление потребует сихронного удаления из всех коллекций.

Сделай лучше отдельный класс UserInfo, храни список пользователей в List<UserInfo> и сериализуй уже его.
C#
1
2
3
4
5
6
7
8
9
10
11
public class UserInfo
{
    public string Name;
    public string Password;
}
 
public class Register
{
    public List<UserInfo> users;
    // ... и т.д.
}
P.S. Кстати, что ты имеешь в виду под сервером? У тебя случайно не ASP.NET приложение?
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
01.05.2014, 22:54  [ТС]
Создавал тему уже. Но там такую ерунду начали писать, да и исходник я поменял - но проблема осталась.
Делаю регистрацию на сервере(сервер асинхронный), проблема в том что старые записи стираются когда я записываю нового пользователя, т.е. в файле содержится всегда только один пользователь. Нужно что-бы в бинарном фале сорержались все зарегеные пользователи.
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
namespace server
{
    class register
    {
        public NamePass user = new NamePass();
 
        public int LoadUser()
        {
            try
            {
                FileStream fs = new FileStream("User.dat", FileMode.Open);
                BinaryFormatter formater = new BinaryFormatter();
                user = (NamePass)formater.Deserialize(fs);
 
                fs.Close();
                return 1;
            }
            catch { return 0; }
        }
 
        public int registers(string name, string pass)
        {
            LoadUser();
            NamePass user = new NamePass();
            user.Name.Add(name);
            user.Pass.Add(pass);
 
            FileStream fs = new FileStream("Users.dat", FileMode.OpenOrCreate);
            BinaryFormatter formater = new BinaryFormatter();
            formater.Serialize(fs, user);
 
            fs.Close();
            
            return 1;
        }
    }
}
 
namespace server
{
    [Serializable]
    public class NamePass
    {
        public List<string> Name = new List<string>();
        public List<string> Pass = new List<string>();
    }
}
Помогите исправить
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
01.05.2014, 23:35
Вместо
C#
1
FileStream fs = new FileStream("Users.dat", FileMode.OpenOrCreate);
Попробуйте
C#
1
FileStream fs = new FileStream("Users.dat", FileMode.Append);
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
01.05.2014, 23:50  [ТС]
Цитата Сообщение от kmaffa Посмотреть сообщение
Слишком много исправлять в Вашем коде
Там почти ничего ненужно было исправлять. Там просто нужно было немного подправить. вот может кому-то понадобиться:
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
namespace server
{
    [Serializable]
    public class NamePass // Класс, который хранит регистрационные данные.
    {
        public List<string> Logins = new List<string>(); // Логин.
        public List<string> Passwords = new List<string>(); // Пароль.
    }
}
 
namespace server
{
    class register
    {
        private NamePass user = new NamePass();
 
        private void LoadUsers()
        {
            try
            {
                FileStream fs = new FileStream("Users.dat", FileMode.Open);
 
                BinaryFormatter formatter = new BinaryFormatter();
 
                user = (NamePass)formatter.Deserialize(fs);
 
                fs.Close();
            }
            catch { return; }
        }
 
        public int registers(string login, string pass)
        {
            LoadUsers();
            //NamePass user = new NamePass();
            user.Logins.Add(login);
            user.Passwords.Add(pass);
 
            FileStream fs = new FileStream("Users.dat", FileMode.OpenOrCreate);
            BinaryFormatter formater = new BinaryFormatter();
            formater.Serialize(fs, user);
 
            fs.Close();
            
            return 1;
        }
    }
}
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
01.05.2014, 23:53  [ТС]
Вот немного исправил и работает как нужно:
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
namespace server
{
    [Serializable]
    public class NamePass // Класс, который хранит регистрационные данные.
    {
        public List<string> Logins = new List<string>(); // Логин.
        public List<string> Passwords = new List<string>(); // Пароль.
    }
}
 
namespace server
{
    class register
    {
        private NamePass user = new NamePass();
 
        private void LoadUsers()
        {
            try
            {
                FileStream fs = new FileStream("Users.dat", FileMode.Open);
 
                BinaryFormatter formatter = new BinaryFormatter();
 
                user = (NamePass)formatter.Deserialize(fs);
 
                fs.Close();
            }
            catch { return; }
        }
 
        public int registers(string login, string pass)
        {
            LoadUsers();
            //NamePass user = new NamePass();
            user.Logins.Add(login);
            user.Passwords.Add(pass);
 
            FileStream fs = new FileStream("Users.dat", FileMode.OpenOrCreate);
            BinaryFormatter formater = new BinaryFormatter();
            formater.Serialize(fs, user);
 
            fs.Close();
            
            return 1;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2014, 23:53
Помогаю со студенческими работами здесь

Дозапись в xml файл
пишу на консоле и не знаю, как сделать, чтобы добавлять новых и новых студентов в xml файл, все время только один перезаписывается. Как...

Осуществить дозапись в файл
В общем есть 2 кнопки. На одной мне надо записать в файл 4 символа (пусть будет qwer) так, чтобы строчка осталась на месте. Просто у меня...

Дозапись в текстовый файл
У меня в браузере есть кнопка с помощью которой в текстовый документ сохраняется текст введенный в адресную строку, но если я введу еще 1...

Осуществить дозапись в файл
Здравствуйте. У меня такая проблема. Пишу игру, в ней надо записывать результаты игры. Как бы создаю таблицу рекордов. Записываю в...

Дозапись в xml файл
Здравствуйте, хотелось бы узнать, как осуществляется дозапись в xml файл? Есть код, но он записывает данные в xml файл, как осуществить...


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
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