2011-12-12 30 views
6

Xin chào gần đây tôi thay thế TextFile bằng TFileStream. Tôi không bao giờ sử dụng nó vì vậy tôi có vấn đề nhỏ với nó.Cách hoạt động trên TFileStream

  • Làm cách nào để thêm tệp vào tệp của tôi sau khi tôi gán nó cho biến?
  • Làm cách nào tôi có thể đọc biểu mẫu nào đó?

tôi cần hình thức dòng được xác định rằng tùy chọn File vì vậy tôi đang làm một cái gì đó như thế:

var linia_klienta:array[0..30] of string; 
AssignFile(tempPlik,'klienci.txt'); 
Reset(tempPlik); 
i:=0; 
While Not Eof(tempPlik) do 
    begin 
    Readln(tempPlik,linia_klient[i]); 
    inc(i); 
    end; 
CloseFile(tempPlik); 

Sau đó, khi dòng hai là cần thiết tôi chỉ đơn giản

edit1.text = linia_klienta[1]; 

Trả lời

13

Nếu bạn cần phải đọc một văn bản và truy cập từng dòng, hãy thử thay vì sử dụng lớp TStringList với lớp này, bạn có thể tải tệp, đọc dữ liệu (accesing mỗi dòng bằng cách sử dụng chỉ mục) và lưu lại dữ liệu.

một cái gì đó như thế này

FText : TStringList; 
i : integer; 
begin 
FText := TStringList.Create; 
try 
    FText.LoadFromFile('C:\Foo\Foo.txt'); 

    //read the lines 
    for i:=0 to FText.Count-1 do  
    ProcessLine(FText[i]); //do something 

    //Add additional lines 
    FText.Add('Adding a new line to the end'); 
    FText.Add('Adding a new line to the end');  

    //Save the data back 
    FText.SaveToFile('C:\Foo\Foo.txt'); 

finally 
    FText.Free; 
end; 

end; 

end; 
+0

Điều đó có vẻ đẹp ... chờ đợi. Tôi có thể tạo tệp mới không? –

+2

Sử dụng TStrings rất thiếu bộ nhớ. – OnTheFly

+0

@Dudi, vâng chỉ thoát khỏi dòng 'loadfromfile' và sau đó thêm dòng mới. – RRUZ

6

Tôi mới hơn phiên bản của Delphi bạn có thể sử dụng TStreamReader/TStreamWriter đây là một ví dụ của việc sử dụng TStreamReader ... đây là chỉ cho các thao tác tập tin văn bản

var 
    SR : TStreamReader; 
    line : String; 
begin 
    SR := TStreamReader.Create('D:\test.txt'); 
    while not (SR.EndOfStream) do 
    begin 
    line := SR.ReadLine; 
    ShowMessage(line); 
    end; 
    SR.Free; 
end; 
0

Tuỳ với những gì bạn muốn làm, đó là lớp luồng bạn cần.

Bạn có muốn làm việc với dữ liệu văn bản (ký tự có dấu ngắt dòng và ký tự kết thúc dòng) không?

HOẶC, bạn có muốn làm việc với dữ liệu nhị phân không?

Tôi thấy bạn đang sử dụng một mảng char thay vì một chuỗi. Bạn có thực sự muốn sử dụng dữ liệu ký tự như thể nó là nhị phân không? Đôi khi, một số ứng dụng yêu cầu trường hợp đó.

+0

Tôi đang sử dụng mảng chuỗi. Tôi cần tạo tệp/tải mới từ tệp, thêm nội dung mới vào tệp. –

+0

Tôi cũng khuyên bạn nên sử dụng lớp TStringList để quản lý một số dòng thay vì trên một mảng đơn giản. Vấn đề ở đây là làm thế nào để đọc/ghi tất cả các dòng với một điều khiển văn bản/chỉnh sửa/ghi nhớ. Ví dụ TStringList trước đó đã cho thấy điều đó. – umlcat

1

TStream và hậu duệ trực tiếp của nó chủ yếu là lớp truy cập cấp thấp. Họ chủ yếu là đối phó với bộ đệm chung. Có một số lớp chuyên biệt hơn mà đi xuống hoặc sử dụng luồng để thực hiện các tác vụ cấp cao hơn.

Vì Delphi 1 TReader và TWriter có thể được sử dụng để đọc và ghi trực tiếp các loại Delphi (chuỗi inlcuding), nhưng chúng không được thiết kế để xử lý các tệp "hướng dòng" (không may là chúng được thiết kế quá nhiều tâm trí, không phải là một khung mục đích chung).

Turbo Power SysTools có lớp TStAnsiTextStream đẹp thực hiện truy cập theo định hướng dòng tới tệp văn bản theo cách tương tự như của TextFile. Kể từ khi Delphi 2009 lớp mới (xem câu trả lời opc0de) thực hiện cùng một loại truy cập mà không cần thư viện của bên thứ ba (hơn nữa họ hỗ trợ mã hóa khác nhau nhờ Delphi 2009 mở rộng hỗ trợ mã, bao gồm Unicode).

Các vấn đề liên quan