我正在尝试使用下面的代码在Delphi 7中为一个文本文件写一行,但它给出了这个错误:
“引发异常类EInOutError且'I / O错误32'”
AssignFile(trackertxt, 'tracker.txt');
ReWrite(trackertxt);
WriteLn(trackertxt, 'left'+':'+':');
CloseFile(trackertxt);
它没有被任何其他应用程序使用,但它仍然提供错误32。
(还需要它覆盖文本文件中的当前内容)。
答案 0 :(得分:3)
这是一个关于如何编写简单文本文件的简单示例
示例来源是 - http://www.delphibasics.co.uk/RTL.asp?Name=TextFile
代码:
var
myFile : TextFile;
text : string;
begin
// Try to open the Test.txt file for writing to
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
// Write a couple of well known words to this file
WriteLn(myFile, 'Hello World');
// Close the file
CloseFile(myFile);
// Reopen the file for reading
Reset(myFile);
// Display the file contents
while not Eof(myFile) do
begin
ReadLn(myFile, text);
ShowMessage(text);
end;
// Close the file for the last time
CloseFile(myFile);
end;
如果文件被另一个进程锁定,或者已经被当前进程锁定(正如Remy Lebeau指出的那样),那么您将收到如此处所述的错误http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_EInOutError.html
32分享违规行为
这意味着另一个进程正在使用该文件,并且在使用同一文件完成该进程之前,您无法保存更改。
以下来自此网站的代码http://www.swissdelphicenter.ch/torry/showcode.php?id=104向您展示了如何验证文件是否已被使用:
function IsFileInUse(FileName: TFileName): Boolean;
var
HFileRes: HFILE;
begin
Result := False;
if not FileExists(FileName) then Exit;
HFileRes := CreateFile(PChar(FileName),
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 IsFileInUse('c:\Programs\delphi6\bin\delphi32.exe') then //here you need to change this with the path to the file you want to edit/write/etc
ShowMessage('File is in use.');
else
ShowMessage('File not in use.');
end;
答案 1 :(得分:2)
您问题中的代码将使用文本'left ::'替换文件中的所有内容。那段代码很好。
I / O错误32是共享冲突。文件被锁定的方式会阻止您的代码写入文件。另一个进程,甚至您自己的进程都锁定了该文件。系统不撒谎。该文件已在某处打开,这就是您的代码因错误32而失败的原因。
我认为你自己的计划最有可能是有罪的一方。查看代码中打开该文件的所有位置。您是否有两个或更多附加到该文件的文件变量?您是否100%确定您从未使用一个文件变量打开文件,而它已经打开了另一个变量?
答案 2 :(得分:-2)
您可以关闭{$ I-}显示的错误,并可以再次使用{$ I +}打开它。
{$I-}
//your code here
{$I+}
有了这个,你就不会看到I / O错误了,你可以安心地使用你的文件。
有关详情you can check here。