Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 17:53   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Вопрос Запись файла

Здравствуйте!
У меня не работает запись в файл. Если к примеру цакоментировать тело функции write_file, то всё работает, ни каких ошибок. А если оставить как есть, то при попытке приложения записать в файл, вылетает ошибка. То есть файл компилится и всё ок, до тех пор пока в файл не пишешь. В чём ошибка???
Цитата:
library Project1;

uses
SysUtils, Classes, cap_ip;

type
MYCap = class
procedure cap_ip1Cap(ip, proto, sourceIP, destIP,SourcePort, DestPort: String; header: PAnsiChar; header_size: Integer;data: PAnsiChar; data_size: Integer);
end;

const
Path_file='D:\1.txt';

var
cap_ip1: TCap_IP;
MYCap1: MYCap;
{$R *.res}

procedure write_file(s,path:string;create_fil e: boolean);
var
f:text;
begin
if create_file=false then
begin
assign(f,path);
rewrite(f);
writeln(f,s);
close(f);
end else
begin
try
assign(f,path);
{$I-}
reset(f);
{$I+}
writeln(f,s);
close(f);
except
end;
end;

end;

procedure Cap_IP(swith:boolean);stdcall;expor t;
begin
if swith=true then
begin
cap_ip1:=TCap_IP.Create(nil);
MYCap1:=MYCap.Create;
cap_ip1.OnCap:=MYCap1.cap_ip1Cap;
cap_ip1.StartCap;
end else
begin
cap_ip1.StopCap;
end;
end;

{ MYCap }

procedure MYCap.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
DestPort: String; header: PAnsiChar; header_size: Integer;
data: PAnsiChar; data_size: Integer);
begin
write_file('----------------------------------------------', path_file,true);
write_file('IP ['+ip+']', Path_file,false);
write_file('Protocol ['+proto+']',path_file,true);
write_file('Source IP ['+sourceIP+']', Path_file,true);
write_file('Dest IP ['+destIP+']', path_file,true);
write_file('Source Port ['+sourcePort+']',path_file,true);
write_file('Dest Port ['+DestPort+']',path_file,true);
write_file('Header ['+Header+']',path_file,true);
write_file('Header_size ['+IntToStr(header_size)+']',path_file,true);
write_file('Date ['+Data+']',path_file,true);
write_file('Data Size ['+IntToStr(Data_size)+']',path_file,true);
end;

exports Cap_IP;

begin
end.
Помогите пожайлуста.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 25.01.2013, 18:28   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

еслиб я писал в

файл так как

пишеш ты это

выглядело именно

так. переделать

открыл закрыл открыл закрыл открыл закрыл... под...чили
Не стесняемся, плюсуем!

Последний раз редактировалось Stilet; 25.01.2013 в 21:11.
Slym вне форума Ответить с цитированием
Старый 25.01.2013, 18:54   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
var
f:text;
а может всё-таки
Код:
var
 f:TextFile;
?
и кстати да, замечание Slym очень актуально. делай процедуру открытия файла и отдельной процедурой пиши в этот файл (уже открытый), а потом закрывай.
если у тебя будет 100500 строк на запись ты в итоге будешь 100500 раз открывать файл на запись - писать туда 1 строку - закрывать ... и так много-много раз ... не кошерно как-то
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 25.01.2013 в 18:57.
Yurk@ вне форума Ответить с цитированием
Старый 25.01.2013, 18:55   #4
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Так тоже пробывал, не работает.

Вот видоизменил код, как говорили, но ошибка осталась
Цитата:
library Project1;

uses
SysUtils, Classes, cap_ip;

type
MYCap = class
procedure cap_ip1Cap(ip, proto, sourceIP, destIP,SourcePort, DestPort: String; header: PAnsiChar; header_size: Integer;data: PAnsiChar; data_size: Integer);
end;

const
Path_file='D:\1.txt';

var
cap_ip1: TCap_IP;
MYCap1: MYCap;
f: textfile;
{$R *.res}


procedure Cap_IP(swith:boolean);stdcall;expor t;
begin
if swith=true then
begin
cap_ip1:=TCap_IP.Create(nil);
MYCap1:=MYCap.Create;
cap_ip1.OnCap:=MYCap1.cap_ip1Cap;
cap_ip1.StartCap;

assignfile(f,path_file);
if fileexists(path_file)=false then
begin
rewrite(f);
closefile(f);
end;
reset(f);
end else
begin
cap_ip1.StopCap;
closefile(f);
end;
end;

{ MYCap }

procedure MYCap.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
DestPort: String; header: PAnsiChar; header_size: Integer;
data: PAnsiChar; data_size: Integer);
begin
writeln(f,'----------------------------------------------', path_file,true);
writeln(f,'IP ['+ip+']');
writeln(f,'Protocol ['+proto+']');
writeln(f,'Source IP ['+sourceIP+']');
writeln(f,'Dest IP ['+destIP+']');
writeln(f,'Source Port ['+sourcePort+']');
writeln(f,'Dest Port ['+DestPort+']');
writeln(f,'Header ['+Header+']');
writeln(f,'Header_size ['+IntToStr(header_size)+']');
writeln(f,'Date ['+Data+']');
writeln(f,'Data Size ['+IntToStr(Data_size)+']');
end;

exports Cap_IP;

begin
end.
Странно, сейчас попробывал убрать работу с файлом, а ошибка всё равно выскачаила. Короче в архиве в одной папке компонент, который я использую. А в другой собственно длл с проверяющей программой.
Помогите пожайлуста!!!
Вложения
Тип файла: rar WinRAR archive.rar (746.4 Кб, 8 просмотров)
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-

Последний раз редактировалось Stilet; 25.01.2013 в 21:12.
vovken1997 вне форума Ответить с цитированием
Старый 25.01.2013, 19:27   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

так а что за ошибка то ?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 25.01.2013, 19:32   #6
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

ВОТ скриншот ошибки
Вложения
Тип файла: doc Документ Microsoft Word (2).doc (28.0 Кб, 7 просмотров)
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 25.01.2013, 19:51   #7
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Примерно нашёл в какой строке ошибка это
cap_ip1.OnCap:=MYCap1.cap_ip1Cap;
Когда её коментируешь, ошибки не происходит. Подскажите, что не так.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 25.01.2013, 20:08   #8
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

мне кажется ашибка в использовании String

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.01.2013, 20:09   #9
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Цитата:
library Project1;

uses
SysUtils, Classes, cap_ip, Dialogs;

type
MYCap = class
procedure cap_ip1Cap(ip, proto, sourceIP, destIP,SourcePort, DestPort: String; header: PAnsiChar; header_size: Integer;data: PAnsiChar; data_size: Integer);
end;

const
Path_file='D:\1.txt';

var
cap_ip1: TCap_IP;
MYCap1: MYCap;
f: textfile;
{$R *.res}


procedure Cap_IP(swith:boolean);stdcall;expor t;
begin
if swith=true then
begin
cap_ip1:=TCap_IP.Create(nil);
MYCap1:=MYCap.Create;
cap_ip1.OnCap:=MYCap1.cap_ip1Cap;
cap_ip1.StartCap;

assignfile(f,path_file);
//if fileexists(path_file)=false then
//begin
//rewrite(f);
// closefile(f);
//end;
reset(f);
// write(f,'gujuyuy1');
end else
begin
cap_ip1.StopCap;
closefile(f);
end;
end;

{ MYCap }

procedure MYCap.cap_ip1Cap(ip, proto, sourceIP, destIP, SourcePort,
DestPort: String; header: PAnsiChar; header_size: Integer;
data: PAnsiChar; data_size: Integer);
begin
writeln(f,'----------------------------------------------',true);
writeln(f,'IP ['+ip+']');
writeln(f,'Protocol ['+proto+']');
writeln(f,'Source IP ['+sourceIP+']');
writeln(f,'Dest IP ['+destIP+']');
writeln(f,'Source Port ['+sourcePort+']');
writeln(f,'Dest Port ['+DestPort+']');
writeln(f,'Header ['+Header+']');
writeln(f,'Header_size ['+IntToStr(header_size)+']');
writeln(f,'Date ['+Data+']');
writeln(f,'Data Size ['+IntToStr(Data_size)+']');

end;

exports Cap_IP;

begin
end.
Я понял, что именно ему не нравится. Если процедуру reset(f); заменить на rewrite(f); то всё работает. Но мне хотелось бы не очищать файл при каждом запуске программы. Почему reset(f); не работает???

ПОМОГИТЕ!!!!
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 25.01.2013, 21:01   #10
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Если процедуру reset(f); заменить на rewrite(f); то всё работает. Но мне хотелось бы не очищать файл при каждом запуске программы. Почему reset(f); не работает???
Код, правда, не смотрел, но Reset открывает текстовые файлы только для чтения, а типизированные также и для записи. Для добавления в конец текстовых есть Append.
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись файла YourLastSong Общие вопросы C/C++ 0 09.10.2011 21:20
Запись файла Angryant Общие вопросы C/C++ 1 06.07.2011 00:03
запись файла dedyshka PHP 5 07.12.2009 17:15
Запись и чтение из файла МаксMorfey Общие вопросы по Java, Java SE, Kotlin 5 10.06.2009 11:39
Запись/чтение из файла (С++) alexov Общие вопросы C/C++ 15 18.01.2009 17:35