if (文件存在) and (文件已经打开) then
Close(文件)请问以上代码该如何写,关键是判断(文件已经打开).
另外,我在程序里打开一个文本文件a,然后再新建一个文本文件b
接着关闭a时程序报错。closefile(a),"i/o 103 error"
文件以reset方式或者append方式打开都会有此异常~~
Close(文件)请问以上代码该如何写,关键是判断(文件已经打开).
另外,我在程序里打开一个文本文件a,然后再新建一个文本文件b
接着关闭a时程序报错。closefile(a),"i/o 103 error"
文件以reset方式或者append方式打开都会有此异常~~
F:TextFile;
begin
if FileExists(FileName) then
begin
AssignFile(F,FileName);
try
//如果文件已经打开的话就产生异常
CloseFile(F);
Except
end;
end;
end;
我就是想把(如果文件打开)这行代码写出来啊
Today:=FormatDateTime('yyyymmdd',now);
FileDir:=ExtractFilePath(Application.ExeName);
SvrTime:=DateTimeToStr(Now);
Memo.Lines.Add(SvrTime+' 正在初始化日志...');
AssignFile(LogFile,FileDir+'logs\'+'!eRror'+YestDay+'.log'); If FileExists(FileDir+'logs\'+'!eRror'+YestDay+'.log') and (该文件正被使用) Then //这里要怎么写??? //关闭前一天的已经打开的日志文件
Begin
Try
CloseFile(LogFile);
Except
;
End;
End;
AssignFile(LogFile,FileDir+'logs\'+'!eRror'+Today+'.log');
Try
If Not FileExists(FileDir+Today+'logs\'+'.log') Then
//新建或者打开当天的日志文件
ReWrite(LogFile)
Else
Reset(LogFile); writeln(LogFile,'something');
Flush(LogFile);
Except
Messagedlg('初始化日志文件失败!',mtError,[mbok],0);
SvrTime:=DateTimeToStr(Now);
Memo.Lines.Add(SvrTime+' 失败!');
Screen.Cursor:=crArrow;
Btbtn_Lstn.Enabled:=True;
Btbtn_Ext.Enabled:=True;
Exit;
End;procedure TFrm_Main.Button1Click(Sender: TObject); //当系统时间到了新的一天时,执行该过程
Var FileDir, //文件目录
Today:String; //程序运行的当天日期
begin
Today:=FormatDateTime('yyyymmdd',now);
FileDir:=ExtractFilePath(Application.ExeName);
AssignFile(LogFile,FileDir+'logs\'+'!eRror'+Today+'.log');
If Not FileExists(FileDir+'logs\'+'!eRror'+Today+'.log') Then
Try
ReWrite(LogFile);
Except
Messagedlg('初始化日志文件失败!',mtError,[mbok],0);
SvrTime:=DateTimeToStr(Now);
Memo.Lines.Add(SvrTime+' 失败!');
Exit;
End;
end;//在上面的TFrm_Main.Button1Click执行完以后,尝试关闭前一天的日志文件
procedure TFrm_Main.Button7Click(Sender: TObject);
Var FileDir, //文件目录
YestDay, //程序运行的前一天
begin
YestDay:=FormatDateTime('yyyymmdd',Yesterday);
FileDir:=ExtractFilePath(Application.ExeName);
AssignFile(LogFile,FileDir+'logs\'+'!eRror'+YestDay+'.log');
If (FileExists(FileDir+'logs\'+'!eRror'+YestDay+'.log')) then
Begin
Try
CloseFile(LogFile); //在这里会抛出异常"i/o 103 error"
SvrTime:=DateTimeToStr(Now);
Memo.Lines.Add(SvrTime+' 日志文件已更新!');
Except
Messagedlg('error',mtError,[mbok],0);
End;
End;
end;
var
Today:Tdatetime;
y:word;
m:word;
d:word;
filename:string;
f:Textfile;
begin
Today:=date;
decodedate(Today,y,m,d);
filename:=inttostr(y)+'-'+inttostr(m)+'-'+inttostr(d)+'.log';
Assignfile(f,filename);
try
if fileexists(filename)=false then
begin
Rewrite(f);
end;
Append(f);
Writeln(f,str);
finally
Closefile(f);
end;end;
关闭了已经打开的前一个文件后,不报错,但是文件实际上仍然没被关闭.
比如我对该文件写一些信息,然后保存,则会出现问题~
那会直接触发异常 "i/o 103 error"
//参考如下代码function IsFileInUse(fName : string ) : boolean;
var
HFileRes : HFILE;
begin
Result := false;
if not FileExists(fName) then exit;
HFileRes:=CreateFile(pchar(fName),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Result:=(HFileRes=INVALID_HANDLE_VALUE);
if not Result then CloseHandle(HFileRes);
end; procedure TForm1.Button1Click(Sender: TObject);
begin
if isfFileInUse('c:\programs\delphi5\bin\delphi32.exe') then
ShowMessage('File in use')
else
ShowMessage('File not in use');
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
i:Integer;
List: TStringList;
TempListItem:TListItem;
begin
List := TStringList.Create;
List.LoadFromFile('test.txt');
for i := 0 to List.Count - 1 do
begin
S := List[i];
TempListItem:=self.ListView1.Items.Add;
TempListItem.Caption:=S;
end;
List.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
TempListColumn:TListColumn;
begin
self.ListView1.ViewStyle:=vsReport;
TempListColumn:=self.ListView1.Columns.Add;
TempListColumn.Caption:='逐行显示文本';
TempListColumn.AutoSize:=true;
end;end.