Có cách nào để kiểm tra xem tệp đã được mở bằng ReWrite trong Delphi không?Kiểm tra tệp được mở ở Delphi
Mã sẽ đi một cái gì đó như thế này:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
Có cách nào để kiểm tra xem tệp đã được mở bằng ReWrite trong Delphi không?Kiểm tra tệp được mở ở Delphi
Mã sẽ đi một cái gì đó như thế này:
AssignFile(textfile, 'somefile.txt');
if not textFile.IsOpen then
Rewrite(textFile);
Bạn có thể nhận được chế độ File. (Một lúc, tôi sẽ tạo một ví dụ).
TTextRec (txt) .Mode cung cấp cho bạn chế độ:
55216 = closed
55217 = open read
55218 = open write
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
Tìm kiếm TTextRec trong đơn vị hệ thống để biết thêm thông tin.
Hãy thử điều này:
function IsFileInUse(fName: string) : boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(fName) then begin
Exit;
end;
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 begin
CloseHandle(HFileRes);
end;
end;
Tuyên bố HFILE nằm ở đâu? Chỉnh sửa: Ok nó trong đơn vị Windows. – grinner
tôi tìm thấy nó dễ dàng hơn để giữ một biến boolean như người bạn đồng hành; ví dụ: bFileIsOpen
. Bất cứ nơi nào tập tin được mở ra, thiết lập bFileIsOpen := true
sau đó, bất cứ khi nào bạn cần phải biết nếu tập tin được mở, chỉ cần kiểm tra biến này; Ví dụ: if (bFileIsOpen) then Close(datafile);
này hoạt động tốt:
function IsOpen(const txt:TextFile):Boolean;
const
fmTextOpenRead = 55217;
fmTextOpenWrite = 55218;
begin
Result := (TTextRec(txt).Mode = fmTextOpenRead) or (TTextRec(txt).Mode = fmTextOpenWrite)
end;
Phương pháp này ngay tại đây đã giúp tôi rất nhiều. – ChargerIIC
câu trả lời Joseph hoạt động hoàn hảo - Tôi gọi là chức năng filenotopen
và thay đổi dòng nếu
Result := (HFileRes = INVALID_HANDLE_VALUE);
để
Result := NOT (HFileRes = INVALID_HANDLE_VALUE);
Tôi cũng loại bỏ dòng 'nếu không (Kết quả), sau đó bắt đầu' (và 'kết thúc') để rằng nó luôn luôn đóng handle hoặc bài tập tiếp theo và đọc cho lỗi
bây giờ tôi gọi nó là như thế này
if filenotopen(filename) then
begin
assignfile(f,filename);
reset(f)
etc;
end
else
message('file open by a different program')
Tôi nghi ngờ những gì bạn tham chiếu là 7 là câu trả lời của JosephStyons, cũng xem xét đến kiểu mã bạn đã sử dụng. Con số đó không phải là một tham chiếu đến bài đăng và trên thực tế có thể thay đổi bất kỳ lúc nào. Xem [bỏ phiếu] (http://stackoverflow.com/help/why-vote). Nếu tôi đã trình bày sai ý định của bạn, vui lòng quay lại hoặc từ chối chỉnh sửa của tôi. – Reti43
Khá chính xác - Tôi đã muốn bỏ phiếu cho anh ta nhưng là cổ xưa và một thằng ngốc không thể nhìn thấy làm thế nào để làm điều đó. – Whitehairedgeezer
gì đã xảy ra với ví dụ? – Toby