Hi I am having a problem running a function to read a text file the problem seems to be that my antivirus blocks my delphi console program because when I do for a visual form there is no problem .

Tengos two codes one is this :

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;

This goes to perfection but do not want to use the component Classes for the program does not weigh much .

Also I have this :

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;

Other code.

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;

This is the problem because when I use my antivirus deletes it at the time , my question to other alternatives I have to read a text file without using Classes.

Someone can help me?

asked Nov 14 '13 at 16:36
Jose Martinez

1281312
 
3  
I don't know about what your AV software is doing, but the second code you posted isn't real, because it won't compile. (finalarchivo : = + lineasleyendo finaldearchivo is not valid Delphi syntax. If you want help with your code, post your real code. We can't debug code you make up as you go, because you could change the real problem while you're making it up. – Ken White Nov 14 '13 at 16:41
    
You can use the solution with TStringList also from a console program! Classes and components / visual forms are two very different things. – jpfollenius Nov 14 '13 at 16:44
    
ken, the real code is that google traslate is that I moved the code.jpfollenius, what I'm looking for is how to do it without TStringList – Jose Martinez Nov 14 '13 at 16:48 
1  
@Jose: Then don't run your code through Google Translate. Run your text, but not the code. – Ken WhiteNov 14 '13 at 17:03
    
"This goes to perfection but do not want to use the component Classes for the program does not weigh much ." -> So you weight the weight of the resulting binary higher than a good design? Then I recommend strongly to turn off $R,D,L,Q and all other compiler/linker settings regarding assertions, checks and debug symbols. Will make debugging worse, but the size of the EXE shrinks dramatically. – JensG Nov 14 '13 at 17:52 

4 Answers

You can use win32 api.

In one of my apps I do things like that, extend/modify to match your needs. This only use Win32 API and does not lock the file. It's like notepad. When you open a file with notepad it is not locked and can still be written or read by other software.

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;
answered Nov 14 '13 at 17:06
HpTerm

5,850124062
 
    
thanks for the help hpterm, the code is perfect, update your code in my post, because I'm making a function called leerarchivo3 () in your code, the problem is not how to use datafile variable to store the total content of the variable codigofinal, I ask you to tell me I did or wrong or I can do what I want, I hope not ask for much – Jose Martinez Nov 14 '13 at 17:22
    
I thought your question was how to open a file without using TStringList. As @StijnSanders said, in that case use Win32 API. That's what I show you here. If now the question has changed, ask another one. I'm sorry I am not sure I understand what you need now. – HpTerm Nov 14 '13 at 17:25
    
the problem I have now is that when using your code try to keep the entire contents of that file in your code is datafile in a single string called codigofinal what I mean to return after using codigofinal value Result:=codigofinal – Jose Martinez Nov 14 '13 at 17:40
1  
@JoseMartinez: My code shows how to do that using AssignFile, which is what you originally asked. If mine doesn't answer, and HpTerm's doesn't answer, and Stijn's doesn't answer, then your question is very unclear, and you need to edit to improve it so we know what you're really asking. – Ken White Nov 14 '13 at 17:43 
1  
@Jose: My code does in fact work; I even showed the output. – Ken White Nov 14 '13 at 17:51
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);
answered Sep 15 '14 at 8:50
 

This code works fine for me as a console application, Delphi 2007, running on Win7 64:

Contents of 'E:\TempFiles\Test.txt':

One
Two
Three
Four

Source:

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.

Produces output:

One
Two
Three
Four
OneTwoThreeFour
answered Nov 14 '13 at 17:20
Ken White

98.6k11118213
 
    
+1 for a working answer. Seems the OP is not very clear about what he wants. – HpTerm Nov 14 '13 at 17:49
    
@HpTerm: Thanks. I've done the same for yours. Seems he's finally decided, too; you got the accept as well. – Ken White Nov 14 '13 at 17:50
2  
Next time I see someone use old-style file functions ... don't know what to do. We really need a banned API list in Delphi. – JensG Nov 14 '13 at 17:55
    
@JensG: Agreed. I haven't used them since TFileStream was introduced. I had to do some dusting to uncover the memories of how to do so. :-) – Ken White Nov 14 '13 at 18:00
    
@JensG : I also agree. – HpTerm Nov 14 '13 at 18:23

If you don't want to use the Classes unit, only need to operate on this file, and are making a Windows executable, you could use the Windows unit instead and call the Win32 API functions: CreateFileReadFileCloseHandle and related functions.

https://stackoverflow.com/questions/19983202/read-text-files-in-delphi

Delphi各种从文件里读取内容的方法的更多相关文章

  1. delphi xe4 ini文件不能读取的解决方法

    今天发现用inifiles下 tinifile.readstring方法突然不能读数据了,结果把ini文件格式由utf-8改成unicode后就能正常读取了.

  2. Flex读取txt文件里的内容(二)

    Flex读取txt文件里的内容 自己主动生成的文件 LoadTxt-app.xml: <?xml version="1.0" encoding="utf-8&quo ...

  3. Flex读取txt文件里的内容(一)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/you23hai45/article/details/25248307  Flex读取txt文件里的内 ...

  4. Flex读取txt文件里的内容报错

    Flex读取txt文件里的内容 1.详细错误例如以下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativeP ...

  5. 从Excel文件中读取内容

    从Excel文件中读取内容 global::System.Web.HttpPostedFileBase file = Request.Files["txtFile"]; strin ...

  6. element ui 上传文件,读取内容乱码解决

    element ui 上传文件,读取内容乱码解决: 加第二个参数 reader.readAsText(file.raw,'gb2312'); <el-upload class="upl ...

  7. web打开本地文件并读取内容

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. php mysqli query 查询数据库后读取内容的方法

    php mysqli query 查询数据库后读取内容的方法 <?php$mysqli = new mysqli("localhost", "my_user&quo ...

  9. Jupyter notebook导入Pycharm项目的.py文件里的模块及方法

    Jupyter notebook导入Pycharm项目种的.py文件里的模块及方法 需要在Jupyter notebook里调用自己写的代码,过程如下. 首先在Pycharm里写好一个文件,例如DCC ...

随机推荐

  1. C++动态数组简单的模拟二元堆

    //C++动态数组简单的模拟二元堆 #include<iostream> using namespace std; class BinaryHeap { private: int cap; ...

  2. Live Unit Testing

    Live Unit Testing 相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是 ...

  3. Linux在出现/java: cannot execute binary file

    位这样的情况下通常的虚拟机(32和64)不匹配造成的.再次,你的虚拟机下一场比赛JDK的版本号的 在与X64它是64位置,另32位置 版权声明:本文博主原创文章.博客,未经同意不得转载.

  4. WPF中 MVVM模式的Slider Binding.

    对于Button的Command的绑定可以通过实现ICommand接口来进行,但是Slider并没有Command属性. 另外如果要实现MVVM模式的话,需要将一些Method和Slider的Even ...

  5. 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理

    一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data ...

  6. WPF 实现拖动工具箱效果

    原文:WPF 实现拖动工具箱效果 1.效果 点击左边的矩形拖动到右边canvas面板,右边面板添加矩形 2.布局 左边是个StockPanel,上面有个矩形,右边是个Canvas面板. 矩形是源,Ca ...

  7. JQuery采纳CSS实现DOM显示和隐藏要素

    今天参加了Code Review活动.阅读编写代码的同事,感到满足当前功能的实现,但是从长远来看,,无论角度还是从代码重用是来看显然不佳维修点. 有什么需要看的权利.通过选择不同的选项下拉框需求,为了 ...

  8. [WPF] PerformClick ?

    原文:[WPF] PerformClick ? [WPF] PerformClick ?  周银辉 WPF没有提供这个方法,还真是让人觉得有些讨厌啊.而关于这个嘛,Google中搜一下,一大堆,但一般 ...

  9. Android 4.0屏蔽式多点触摸

    比方这张图.我想不接或者接单,二者仅仅能点一个,不能同一时候点击,否则会造成混乱.我们仅仅要在嵌套他们俩的布局中增加这么一段话: android:splitMotionEvents="fal ...

  10. Layui 2.0.0 正式发布:潜心之作,开箱即用的前端UI框架(确实很多内容)

    Hi,久违了.处暑逼近之际,潜水半年的 layui 是时候出来透透气了.我们带来的是全新的 2.0 版本,一次被我们定义为“破茧重生”的倾情之作.如果你已曾用过 layui,你将真正感受到一次因小而大 ...