您好我在运行函数来读取文本文件时出现问题似乎是我的防病毒程序阻止了我的delphi控制台程序,因为当我为可视化表单执行操作时没有问题。
Tengos两个代码就是这个:
function LeerArchivox(const filename: TFileName): String;
var
List: TStringList;
begin
if (FileExists(filename)) then
begin
List := TStringList.Create;
List.Loadfromfile(filename);
Result := List.text;
List.Free;
end;
end;
这是完美但不想使用组件类程序的重量并不重。
我也有这个:
function leerarchivo(filealeer: string): string;
var
abriendo: TextFile;
lineasleyendo: string;
finaldearchivo: string;
begin
finaldearchivo := '';
AssignFile(abriendo, filealeer);
Reset(abriendo);
while not Eof(abriendo) do
begin
ReadLn(abriendo, lineasleyendo);
finaldearchivo := finaldearchivo + lineasleyendo;
end;
CloseFile(abriendo);
Result := finaldearchivo;
end;
其他代码。
function leerarchivo3(archivoaleer: string): string;
const
BUFF_SIZE = $8000;
var
dwread: LongWord;
hFile: THandle;
datafile: array [0 .. BUFF_SIZE - 1] of ansichar;
codigofinal: string;
begin
codigofinal := '';
hFile := CreateFile(PChar(archivoaleer), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY, 0);
SetFilePointer(hFile, 0, nil, FILE_BEGIN);
Readfile(hFile, datafile, BUFF_SIZE, dwread, nil);
while (dwread > 0) do
begin
Readfile(hFile, datafile, BUFF_SIZE, dwread, nil);
codigofinal := codigofinal + datafile;
end;
Result := codigofinal;
end;
这是问题所在,因为当我使用我的防病毒软件时删除它,我的问题是其他选择我必须在不使用类的情况下阅读文本文件。
有人可以帮助我吗?
答案 0 :(得分:6)
此代码适用于我作为控制台应用程序,Delphi 2007,在Win7 64上运行:
'E:\ TempFiles \ Test.txt'的内容:
One
Two
Three
Four
来源:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Txt: TextFile;
s: string;
AllText: string;
begin
AllText := '';
AssignFile(Txt, 'E:\TempFiles\test.txt');
Reset(Txt);
while not Eof(Txt) do
begin
Readln(Txt, s);
AllText := AllText + s;
// Write out each line; comment out to stop.
Writeln(s);
end;
CloseFile(Txt);
// Write out all content as a single string.
WriteLn(AllText);
ReadLn;
end.
产生输出:
One
Two
Three
Four
OneTwoThreeFour
答案 1 :(得分:4)
您可以使用win32 api。
在我的一个应用程序中,我会执行类似的操作,扩展/修改以满足您的需求。这仅使用Win32 API并且不锁定文件。它就像记事本。当您使用记事本打开文件时,它不会被锁定,仍然可以被其他软件写入或读取。
const
BUFF_SIZE = $8000;
var
dwread:LongWord;
hFile: THandle;
datafile : array [0..BUFF_SIZE-1] of ansichar;
//create file handler
hFile := createfile(PChar(TFilePanel(FilePanelList.Items[i-1]).LongFileName), GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, 0);
//set file pointer to beginning of file
SetFilePointer(hFile, 0, nil, FILE_BEGIN);
//read the file
try
Readfile(hFile, datafile, BUFF_SIZE, dwread, nil);
while (dwread > 0) do
begin
//read/use datafile
Here_do_something_with_datafile;
Readfile(hFile, datafile, BUFF_SIZE, dwread, nil);
end;
finally
closehandle(hFile);
end;
答案 2 :(得分:1)
var txt : TextFile;
begin
AssignFile(txt,'filetxt.txt');
ReWrite(filetxt);
Writeln(filetxt,memo1.Lines.Text);
CloseFile(filetxt);
Reset(filetxt);
while not Eof(filetxt) do
begin
Readln(filetxt);
end;
CloseFile(filetxt);
答案 3 :(得分:0)
如果您不想使用Classes单元,只需要操作此文件,并且正在制作Windows可执行文件,您可以改用Windows单元并调用Win32 API函数:CreateFile, ReadFile,CloseHandle及相关功能。