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

Проблемы с WriteFile

07.12.2011, 10:28. Показов 2548. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо открыть/создать файл, и всё время записывать туда какуюто информацию, и делать это всё на WinApi.

Делаю так: при инициализации формы файл открывается, а в таймере на форме лежит вот этот код (записывается текущее время)

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//постоянная запись в файл
this->Memo2->Lines->Add(time(0));
bufer = this->Memo2->Text;
 
DWORD nNumberOfBytesToWrite = bufer.Length();
LPDWORD lpNumberOfBytesWrite =NULL;
LPOVERLAPPED lpOverlapped = NULL;
    WriteFile( hFile,
//собственно указатель на файл
         bufer.c_str(),
// указатель на буфер - откуда записываем данные в  файл
          nNumberOfBytesToWrite,
//объем записываемых данных
          lpNumberOfBytesWrite,
//фактический размер записанных данных
          lpOverlapped
// флаг режима доступа к файлу: асинхронный(FILE_FLAG_OVERLAPPED)
 
//или синхронный(NULL)
            );
Первая запись в файл происходит нормально (проверял его содержимое), однако начиная со второй программа вылетает с вот таким сообщением

http://dl.dropbox.com/u/1690996/av.PNG
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2011, 10:28
Ответы с готовыми решениями:

WriteFile
Есть 3 массива! а1, а2, а3! Как с помощью WriteFile, записать в фаил поочередно эти три массива! Фаил не должен перезаписываться! Он должен...

WriteFile
есть к примеру строка: string h = "2 3\r\n"; как можно переменную h использовать в WriteFile: Вот так работает:...

Метод writeFile
Парни подскажите что не так с моим методом! У меня есть метод public static void writeFile(File file, List<String> text) ...

12
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
07.12.2011, 11:01
каков интервал таймера? не пробовал приостанавливать таймер на время записи?
да и
C++
1
bufer.c_str()
сомнительно для буфера
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2011, 11:05
Вот так не проще будет? __
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
#include <vcl.h> 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      Memo1->Lines->SaveToFile("Timer.txt");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
      Memo1->Lines->Add(TimeToStr(Time()));
      if (CheckBox1->Checked)
        Memo1->Lines->SaveToFile("Timer.txt");
}
//---------------------------------------------------------------------------
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 14:16
Прощее в StringList, хотя, конечно, от задачи зависит.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2011, 14:57
А вот интересно: почему (это вопрос, а не ...). Memo на два символа короче, да и странслированная программа при использовании Memo меньше на 3-4 кБ.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 15:08
Цитата Сообщение от nick42 Посмотреть сообщение
А вот интересно: почему (это вопрос, а не ...). Memo на два символа короче, да и странслированная программа при использовании Memo меньше на 3-4 кБ.
Если по сравнению с TStringList, то вы ошибаетесь. Дело в том, что TMemo использует тот же TStringList, поэтому отличаться идентичные данные просто не могут. Но TMemo - визуальный компонент и как раз тут собака зарыта. Любая информация в TStringList заканчивается на "r\n\" без ручного редактирования. Но вот добавляем человеческий фактор - вы заканчиваете свой текст без переноса на следующую строчку.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 15:34
потому, что списком можно оперировать где угодно, и как угодно, а с мемо необходимы дополнительные телодвижения , но я говорил - от задачи зависит ... и от вкуса, состояния нестояния, настроения руководства... да мало ли от чего...
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 20
07.12.2011, 16:43  [ТС]
Вот так не проще будет? __
Требуется все сделать на WinApi (препод-редиска). К тому же требуется постоянно держать файл открытым, а savetofile открывает и закрывает сразу, в уже открытый писать не может.
каков интервал таймера? не пробовал приостанавливать таймер на время записи?
Интервал 1000мс, не пробовал, т.к.
а) 1000 мс и так много
б) незнаю как определять, что запись записалась

Прощее в StringList, хотя, конечно, от задачи зависит.
Наверное, но что принципиально изменится ? У меня ведь проблема с access violation

сомнительно для буфера
а как надо ?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2011, 17:29
- ну, тогда вот так__
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
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
        FILE *F;
        char *bufer;
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
       F = fopen("myFile.txt","wt");
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
       Memo1->Lines->Add(TimeToStr(Time()));
       if(F) { fseek(F,0,0);
         bufer = Memo1->Text.c_str();
         fwrite(bufer,Memo1->Text.Length(),1,F) ;
       }
}
0
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 20
07.12.2011, 19:55  [ТС]
Вроде работает, но записывает с отставанием примерно на 3 строки.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 20:24
Цитата Сообщение от spliner Посмотреть сообщение
Вроде работает, но записывает с отставанием примерно на 3 строки.
Хотите быстрее - измените интервал таймера.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.12.2011, 21:52
- не умеете анализировать - изменяйте интервал таймера!
1
0 / 0 / 0
Регистрация: 20.11.2010
Сообщений: 20
07.12.2011, 22:11  [ТС]
Пробовал, интервал таймера тут не причем, даже если на 3 секунды поставить его.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2011, 22:11
Помогаю со студенческими работами здесь

COM порт writefile
проблема такая: не получается отрправить &quot;данные&quot; на com порт. выдает ошибку 87 (The parameter is incorrect.) проблему не удалось решить,...

Атомарна ли WriteFile
Здравствуйте. Открыт один файл, несколько потоков использую его хэндл для записи (логирование). После каждого вызова WriteFile...

Как пользоваться с функцией WriteFile?
Плз подскажите как пользоваться с функцией WriteFile в FASM. Файл создал с помощью CreateFile, но запись почему-то не идет invoke...

WriteFile не пишет
#include&lt;windows.h&gt; #include&lt;iostream&gt; #include&lt;process.h&gt; #include&lt;string.h&gt; #define THRCOUNT 2 HANDLE hOpen, hWrite; ...

ReadFile и WriteFile
Есть ком-порт. В нем Tx и Dx c соединены проводом Я отправляю в порт массив байт, а он выдает совсем другие данные. bufferout =...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru