С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675

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

01.05.2014, 20:00. Показов 1937. Ответов 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
18245 / 14167 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru