С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 17

Некорректная запись в файл из массива

25.04.2015, 17:54. Показов 1063. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int kol;
AnsiString user;
DeleteFile("base.dat");
Form1->file_id=FileCreate("base.dat");
if (Form1->file_id==-1){ShowMessage("фаил не создан");return;}
for (int i=0;i<m1;i++)
   {
    user=Form1->log[2][i]+".";
    kol=user.Length();
    FileWrite(Form1->file_id,user.c_str(),sizeof(kol));
    user=Form1->log[0][i]+".";
    kol=user.Length();
    FileWrite(Form1->file_id,user.c_str(),sizeof(kol));
    user=Form1->log[1][i]+".";
    kol=user.Length();
    FileWrite(Form1->file_id,user.c_str(),sizeof(kol));
   }
FileClose(Form1->file_id);
В теории данный код должен записывать каждую ячейку строкового массива в файл через точку, но он делает что-то мне не очень понятное.Он пишет только 4 символа и как-то очень странно.Можете подсказать, что я неправильно делаю?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2015, 17:54
Ответы с готовыми решениями:

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

Запись char-массива в текстовый файл
Нашел код для считывания из файла в char-массив: int FileIn=FileOpen(FileInName,fmOpenRead); int finsize=FileSeek(FileIn,0,2); char...

Посимвольная запись/чтение массива в файл
Как реализовать, чтобы при нажатии кнопки числа записывались массивом в файл посимвольно, и потом можно было этот массив сложить?!

5
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.04.2015, 20:48
sizeof(kol) вернет размер переменной kol, то бишь размер инта, то бишь четыре. Вот четыре байта со строки и пишется.
1
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 17
25.04.2015, 21:04  [ТС]
Господи,3 с половиной часа в тупую.Спасибо, огромное и человеческое.Вопрос не по теме.Я помню с помощью каких-то чудных строк, можно удалять, искать, вставлять символы в строку.Не могли бы вы подсказать эти строки?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.04.2015, 21:19
В VCL все это есть, частично методами в самих классах AnsiString и UnicodeString, частично - функциями, типа StuffString, StringReplace и подобных.
0
0 / 0 / 0
Регистрация: 08.04.2015
Сообщений: 17
26.04.2015, 00:00  [ТС]
Появился новый геморой:
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
String log[9];
AnsiString user2;
int kol1;
if (LabeledEdit1->Text=="Admin" && LabeledEdit2->Text=="Admin")
   {ShowMessage("Добро пожаловать, уровень вашего доступа - Admin");Form6->Close();}
else
   {
    AnsiString user=LabeledEdit1->Text+"."+LabeledEdit2->Text+"."+"A";
    AnsiString user1=LabeledEdit1->Text+"."+LabeledEdit2->Text+"."+"U";
    int id=FileOpen("base.dat",fmOpenReadWrite);
    int kol=FileRead(id,&kol,sizeof(kol));
    for (int i=0;i<kol;i++)
       {
        FileRead(id,&kol1,sizeof(kol));
        user2=FileRead(id,user2.c_str(),kol1);
        log[i]=user2;
        if (user==log[i])
           {ShowMessage("Добро пожаловать, уровень вашего доступа - Admin");Form6->Close();}
        else
           if (user1==log[i])
              {
               ShowMessage("Добро пожаловать, уровень вашего доступа - User");
               Form1->N14->Enabled=false;
               Form6->Close();
              }
       }
   }
Прежде чем обратиться снова прочитал тему:
Запись и чтение из файла строковой переменной
Я понял точно, что то, что я написал имеет те же ошибки, что и в теме того пользователя. Можете объяснить студенту как можно загрузить из фаила записи?Желательно на пальцах.

Формат записи в фаиле такой:Кол-во записей,длина 1ой записи,сама запись,длина 2ой записи,сама запись и т.д.
Например:210бла.блабла.б15бла.блабла.б
0
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
29.04.2015, 00:02
Цитата Сообщение от bonaparte436 Посмотреть сообщение
int kol=FileRead(id,&kol,sizeof(kol));
Ужос. Тебе переменных мало? )
И что ты везде этот sizeof суёшь?
FileRead (id - это понятно, буфер-куда писать данные из файла, количество-сколько байт читать)
Есть еще Seek — поставить указатель в файле, тогда FileRead будет читать с этого места.

Добавлено через 8 минут
C++
1
2
3
4
5
6
                     int Buf[1000];
                     int hFirstFile = FileOpen("C:\\data.txt", fmOpenRead);
                     FileSeek(hFirstFile,10,0);   // 10 от начала
                     FileSeek(hFirstFile,20,1);   // 20 от текущей позиции
                     FileSeek(hFirstFile,30,2);   // 30 от конца
                     iBytesRead = FileRead(hFirstFile, &Buf, 33);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2015, 00:02
Помогаю со студенческими работами здесь

Запись и чтения текстового массива в файл
Всем привет! Пытаюсь записать массив, состоящий из строк, в файл. Builder ругается, когда пытаюсь прочитать файл. Код на запись...

Некорректная запись массива в файл
Люди добрые! Помогите христа ради! Создаю массив dim massiv(1) as string massiv(0)=&quot;str1&quot; massiv(1)=&quot;str2&quot; ...

Некорректная запись в файл
Добрый день. Я выполнял задание по лабораторной работе &quot;Из текста, расположенного в файле, исключить однобуквенные слова. Результат...

Некорректная запись в файл
Столкнулся с непонятной проблемой. Есть строка которая содержит шифрованные символы ...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru