3 / 3 / 1 Регистрация: 27.03.2010 Сообщений: 40 |
|
1 |
|
23.05.2010, 23:31. Показов 10096. Ответов 4
Подскажите, пожалуйста, пишу простую программу на дельфи, выдает такие ошибки [Error] Write error on ‘C:Program FilesBorlandDelphi7ProjectsProject2.exe’ [Error] RLINK32: Error writing file «C:Program FilesBorlandDelphi7ProjectsProject2.exe» что это может быть?
0 |
26 / 26 / 10 Регистрация: 24.08.2009 Сообщений: 71 |
|
24.05.2010, 01:07 |
2 |
А ос какая стоит? Если 7 или виста возможно из-за отсутствия прав администратора
0 |
3 / 3 / 1 Регистрация: 27.03.2010 Сообщений: 40 |
|
25.05.2010, 12:17 [ТС] |
3 |
семерка стоит, пасиба, щас посмотрю))
0 |
13095 / 5876 / 1706 Регистрация: 19.09.2009 Сообщений: 8,808 |
|
25.05.2010, 12:22 |
4 |
Rinas, возможно ты запустил EXE и во время его работы пытаешься скомпилировать проект.
1 |
3 / 3 / 1 Регистрация: 27.03.2010 Сообщений: 40 |
|
25.05.2010, 16:54 [ТС] |
5 |
это вряд ли, я скачал делфи, написал простенькую программу и такая ошибка.
0 |
Posted by jpluimers on 2021/07/29
Since I always forget where to get the full list: there is none in the documentation. Only parts.
Usually the mapping is from run-time errors to exceptions:
In addition, exceptions are converted to run-time errors when the exception handling mechanism in the SysUtils
unit is not up.
This can happen early in start-up, or late un shut-down of an application.
The one I encountered most is the runtime error 216 during shutdown: it is an Access Violation (EAccessViolation).
Run-time errors (not changed since Delphi 2007)
- [WayBack] Delphi 2007: Exceptions
When an application uses the
SysUtils
unit, most runtime errors are automatically converted into exceptions. Many errors that would otherwise terminate an application – such as insufficient memory, division by zero, and general protection faults – can be caught and handled. - [WayBack] Delphi 2007: Delphi Runtime Errors
Runtime errors take the form:
Runtime error nnn at xxxxxxxx
where
nnn
is the runtime error number, andxxxxxxxx
is the runtime error address.Applications that use the SysUtils class map most runtime errors to Exceptions, which allow your application to resolve the error without terminating.
Delphi runtime errors are divided into the following categories:
- I/O errors, numbered 100 through 149
- Fatal errors, numbered 200 through 255
- Operating system errors
- [WayBack] Delphi 2007: I/O Errors
I/O errors cause an exception to be thrown if a statement is compiled in the
{$I+}
state. (If the application does not include theSysUtils
class, the exception causes the application to terminate).In the
{$I-}
state, the program continues to execute, and the error is reported by theIOResult
function.Number
Name
Description
100
Disk read error
Reported by Read on a typed file if you attempt to read past the end of the file.
101
Disk write error
Reported by CloseFile, Write, WriteIn, or Flush if the disk becomes full.
102
File not assigned
Reported by Reset, Rewrite, Append, Rename, or Erase if the file variable has not been assigned a name through a call to Assign or AssignFile.
103
File not open
Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open.
104
File not open for input
Reported by Read, Readln, Eof, Eoln, SeekEof, or SeekEoln on a text file if the file is not open for input.
105
File not open for output
Reported by Write or Writeln on a text file if you do not generate a Console application.
106
Invalid numeric format
Reported by Read or Readln if a numeric value read from a text file does not conform to the proper numeric format.
- [WayBack] Delphi 2007: Fatal errors
Number
Name
Exception
200
Division by zero
EDivByZero
201
Range check error
ERangeError
202
Stack overflow
EStackOverflow
203
Heap overflow error
EOutOfMemory
204
Invalid pointer operation
EInvalidPointer
205
Floating point overflow
EOverflow
206
Floating point underflow
EUnderflow
207
Invalid floating point operation
EInvalidOp
210
Abstract Method Error
EAbstractError
215
Arithmetic overflow (integer only)
EIntOverflow
216
Access violation
EAccessViolation
217
Control-C
EControlC
218
Privileged instruction
EPrivilege
219
Invalid typecast
EInvalidCast
220
Invalid variant typecast
EVariantError
221
Invalid variant operation
EVariantError
222
No variant method call dispatcher
EVariantError
223
Cannot create variant array
EVariantError
224
Variant does not contain array
EVariantError
225
Variant array bounds error
EVariantError
226
TLS initialization error
No exception to map to.
227
Assertion failed
EAssertionFailed
228
Interface Cast Error
EIntfCastError
229
Safecall error
ESafecallException
230
Unhandled exception
No exception to map to.
231
Too many nested exceptions
Up to 16 permitted.
232
Fatal signal raised on a non-Delphi thread
No exception to map to.
For completeness, some DOS Borland/Turbo Pascal errors from [WayBack] where are the runtime error codes, eh? – delphi
Borland Pascal 7 runtime errors; most applicable to Delphi:
*** DOS ***
1 Invalid function number
2 File not found
3 Path not found
4 Too many open files
5 File access denied
6 Invalid file handle
12 Invalid file access code
15 Invalid drive number
16 Cannot remove current directory
17 Cannot rename across drives
18 No more files
*** I/O ***
100 Disc read error
101 Disc write error
102 File not assigned
103 File not open
104 File not open for input
105 File not open for output
106 Invalid numeric format read from file
*** CRITICAL ***
150 Write protected
151 Unknown unit/Bad drive request struct length
152 Drive not ready
153 Unknown command
154 CRC error in data
155 Bad drive request structure length
156 Disc seek error
157 Unknown media type
158 Sector not found
159 Printer out of paper
160 Device write fault
161 Device read fault
162 Hardware failure (C-DOS: file/device opened by another process)
*** FATAL ***
200 Division by zero
201 Range check
202 Stack overflow (on entry to a procedure or function)
203 Heap overflow (from New() or GetMem())
204 Invalid pointer operation (from Dispose() or FreeMem())
205 Floating point overflow
206 Floating point underflow
207 Invalid floating point operation
208 Overlay manager not installed (usually when calling OvrInit)
209 Overlay file read error
210 Object not initialized
211 Call to abstract method
212 Stream registration error
213 Collection index out of range
214 Collection overflow error
215 Arithmetic overflow error
216 General Protection fault
The run-time error 216
- [WayBack] Delphi Runtime error 216 thrown in SysUtils.FinaliseUnits, line number not in mapfile – Stack Overflow
- [WayBack] madshi.net • View topic – Runtime Error 216
–jeroen
This entry was posted on 2021/07/29 at 06:00 and is filed under Delphi, Development, Software Development.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.
I read my physical drive and am having some problems.
64-bit applications:
- 512 bytes:
Stream read error
/Stream write error
.Read
: workReadBuffer
: not work
- 38400 bytes: work.
32-bit applications: work on all cases.
function setinact(diskid: string): boolean;
var
hdevi: THandleStream;
hDevice: THandle;
mfile: TMemoryStream;
hbuff, mbuff: array[0..511] of byte;
i: integer;
BytesReturned: DWORD;
begin
Result:=False;
hDevice := CreateFile(Pchar('\.PHYSICALDRIVE'+diskid), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice <> INVALID_HANDLE_VALUE then
begin
try
hdevi := THandleStream.Create(hDevice);
try
mfile:=TMemoryStream.Create();
try
hdevi.ReadBuffer(hbuff[0],length(hbuff));
mfile.WriteBuffer(hbuff[0],Length(hbuff));
mfile.Position:=0;
mfile.ReadBuffer(mbuff[0],length(mbuff));
mbuff[446]:=$00;
mbuff[462]:=$00;
mbuff[478]:=$00;
mbuff[494]:=$00;
hdevi.Position:=0;
hdevi.WriteBuffer(mbuff[0],length(mbuff));
Result:=True;
finally
mfile.Free;
end;
finally
hdevi.Free;
DeviceIoControl(hDevice, IOCTL_DISK_UPDATE_PROPERTIES, nil, 0, nil, 0, BytesReturned, nil);
end;
finally
CloseHandle(hDevice);
end;
end;
end;
How to read 512 bytes on 64-bit applications?
Updated:
I’ve run this application on another PC, it worked. I do not understand why.
Updated 2:
Thanks to David Heffernan. The code below work. But why for 32-bit applications, it always succeed with the first code?
function setinact(diskid: string): boolean;
var
hDevice: THandle;
hbuff: PByte;
i: integer;
hexstr: String;
DISK_GEOMETRY : _DISK_GEOMETRY;
BytesPerSector: Int64;
BytesReturned: DWORD;
begin
Result:=False;
hDevice := CreateFile(Pchar('\.PHYSICALDRIVE'+diskid), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice = INVALID_HANDLE_VALUE then Exit;
try
GetMem(hbuff, 512);
try
if not DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, Nil, 0, @DISK_GEOMETRY, sizeof(DISK_GEOMETRY), BytesReturned, nil) then Exit;
BytesPerSector:=DISK_GEOMETRY.BytesPerSector;
if not ReadFile(hDevice, hbuff^, 512, BytesReturned, nil) then Exit;
.................
SetFilePointer(hDevice, 0, nil, FILE_BEGIN);
if not WriteFile(hDevice, hbuff^, 512, BytesReturned, nil) then Exit;
finally
FreeMem(hbuff, 512);
end;
Result:=True;
DeviceIoControl(hDevice, IOCTL_DISK_UPDATE_PROPERTIES, nil, 0, nil, 0, BytesReturned, nil);
finally
CloseHandle(hDevice);
end;
end;