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

Файлы. Открыть, записать, закрыть

15.09.2011, 12:01. Показов 1053. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток =)
Обычно я делаю операции с файлами на С, но в этот раз вынужден на С++, т.к. прога из-за С падает
Вот код, который у меня есть
C
1
2
3
4
5
6
7
8
FILE* accfile;
accfile = fopen (acc,"a+");
int Money = 200;
int n = 0;
char a[128]; 
str_format(a, sizeof(a), "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
fputs(a, accfile);
fclose(accfile);
Объясните как сделать это на С++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2011, 12:01
Ответы с готовыми решениями:

Открыть для записи текстовый файл data.txt и записать в него полученный массив, закрыть файл
Составить программу с подпрограммами для выполнения следующего алгоритма (предусмотреть процедуры...

Как закрыть или скрыть основное окно и открыть дочернее, и как потом закрыть дочернее окно и открыть основное
Здравствуйте, передо мной возникла проблема, с которой я не могу справиться. Суть проблемы в том,...

Открыть закрыть блок при нажатии по ссылке и закрыть его при нажатии вне этого блока
Здравствуйте, несколько дней уже пытаюсь решить задачу, мне нужно сделать блок с авторизацией....

Закрыть и опять открыть
У меня готовая игра...Заходим в меню и нажимаем кнопку играть открывается форма игры. Играем,...

8
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
15.09.2011, 12:18 2
http://www.cplusplus.com/refer... m/fstream/
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
15.09.2011, 12:28  [ТС] 3
Я в 7 классе и с англ не дружу, подскажи переводчик а то гугл плохой
0
166 / 164 / 27
Регистрация: 20.04.2010
Сообщений: 607
15.09.2011, 12:38 4
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
гугл плохой
ну раз гугл плохой, то уж не знаю какой переводчик по лучше.

http://www.cplusplus.com/doc/tutorial/files/ - пример
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
15.09.2011, 12:39  [ТС] 5
А не мог бы ты скинуть готовый код ?
0
Заблокирован
Автор FAQ
15.09.2011, 13:01 6
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
прога из-за С падает
падает совсем не потому что на Си

Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
str_format(a, sizeof(a), "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
-вот здесь m_apPlayers[ClientID]->name - может быть выход за пределы выделенной области памяти, переменная pass можеть быть NULL, приведенный код не подлежит анализу т.к. нельзя проконтролировать значения переданных параметров, в заключении добавлю что есть простой механизм прямого форматированного вывода в файл - fprintf. Касательно твоего кода

C
1
2
3
4
5
6
7
FILE* accfile;
accfile = fopen (acc,"a+");
int Money = 200;
int n = 0;
char a[128]; 
fprintf(accfile, "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
fclose(accfile);
Добавлено через 7 минут
Кроме того
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
fopen (acc,"a+");
путь к файлу acc может быть неверен или же передаваться относительный а не абсолютный путь и fopen вернёт NULL, в приводимом алгоритме даже проверки нет открыля ли поток или нет, а введь это очень легко ввести
C++
1
2
if(accfile)
    fprintf(accfile,"format",params);
При таком построении кода запись будет происходить лишь когда действительно получили доступ к файлу. Вобщем скажу так в плане багов - код топика один сплошной потенциальный баг
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
15.09.2011, 13:18  [ТС] 7
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
                        char pass[128];
            if (sscanf(pMsg->m_pMessage, "/register %s %s", m_apPlayers[ClientID]->name, pass))
            {
                if (m_apPlayers[ClientID]->Exists(m_apPlayers[ClientID]->name))
                {
                    SendChatTarget(ClientID, "ERROR: Account already created!");
                    return;
                }
                if(strlen(pass) > 15)
                {
                    SendChatTarget(ClientID, "ERROR: password is to long!");
                    return;
                }
                if(strlen(m_apPlayers[ClientID]->name) > 15)
                {
                    SendChatTarget(ClientID, "ERROR: name is to long!");
                    return;
                }
                char acc[128];
                str_format(acc, sizeof(acc), "accounts/%s.acc", m_apPlayers[ClientID]->name);
                if(mkdir(acc))
                    dbg_msg("account", "Account folder created!");  
                FILE* accfile;
                accfile = fopen (acc,"a+");
                    fprintf(accfile, "%s\n%s\n200\n0\n0\n0\n0\n0\n0\n0\n0", m_apPlayers[ClientID]->name, pass);
                fclose(accfile);
                int Money = 200;
                int n = 0;
                char a[128]; 
                str_format(a, sizeof(a), "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
                SendChatTarget(ClientID, "Account create sucessfully");
                SendChatTarget(ClientID, "Now you can join the game");
                SendChatTarget(ClientID, "If you want it write /login <user> <pass>");
            }
Как видите m_apPlayers[ClientID]->name не может выходить за пределы выделенной памяти

Путь к acc выглядит так: accounts/%s.acc => путь верен
При таком построении кода запись будет происходить лишь когда действительно получили доступ к файлу
Вот это я не понял, но доступ к файлу должен быть, потому что на этом пользователе стоят права админа

P.S. Так трудно чтоли готовый код дать ? =)
P.P.S. Когда закоментирую
C
1
2
3
4
5
6
7
FILE* accfile;
accfile = fopen (acc,"a+");
int Money = 200;
int n = 0;
char a[128]; 
fprintf(accfile, "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
fclose(accfile);
Сервер не падает => ошибка в этой части кода, вопрос: где ?
Вот тут?
fprintf(accfile, "%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d\n%d", m_apPlayers[ClientID]->name, pass, Money, n, n, n, n, n, n, n, n);
0
Заблокирован
Автор FAQ
15.09.2011, 13:36 8
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
Сервер не падает => ошибка в этой части кода, вопрос: где ?
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
pass
- она точно не NULL

Добавлено через 2 минуты
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
sscanf(pMsg->m_pMessage, "/register %s %s", m_apPlayers[ClientID]->name, pass)
- думаю вот ошибка sscanfy побоку что ты хочешь /register убрать
Нужно так
sscanf(pMsg->m_pMessage, "%s %s %s", buf, m_apPlayers[ClientID]->name, pass)

Добавлено через 2 минуты
Цитата Сообщение от ReDFoX43.rus Посмотреть сообщение
"/r
- здесь вообще компилятор воспринимал register как
перевод курсора вначало+egister - 100% у тебя строка не правильно парсилась, попробуй с buf как я написал
0
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 43
15.09.2011, 13:48  [ТС] 9
Я не хочу /register убрать
И он не принял это как перевод курсора вначало, потому что это чат и курсора там нету =)
Спасибо за советы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2011, 13:48
Помогаю со студенческими работами здесь

Открыть, закрыть форму
Доброго времени суток. Есть две формы FConnection и FPSW. В Project-&gt;Options сделал форму...

Открыть закрыть меню
подскажите пожалуйста в чём проблема то ? css свойство стоит display:none; но почему при нажатии...

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

Открыть и закрыть форму
Собственно тема и есть сам вопрос. Как открыть другую форму из одной или закрыть первую, допустим,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru