안녕하세요. 최용일입니다.
당연히 안되는 방법이네요. 아래에서 선언한 arr1은 정적인 변수가 아니라 포인터입니다.
읽을 때 위치를 지정을 하세요. 그렇지 않으면 변수 포인터를 바꿀려고 하기 때문에
Access Violation에러가 발생할 것입니다.
BlockRead(FH, Arr1[0] ,100) ;
Edit1.Text := PChar(Arr1) ;
그리고 SetLength나 GetMem으로 메모리에 변수를 할당한 뒤에는 반드시 SetLength(변수, 0)
이나 FreeMem 으로 포인터를 메모리에서 해제하세요. 파일도 닫아주시고요...
^^ 항상 즐코하세요.
이성윤 wrote:
> 파일을 open 하여 내용을 동적배열 변수에 저장코자 합니다.
>
> 그러나,거의 모든 방법을 다 시도 해봤지만 않됩니다.
> 당연히 되어야 하는 것이 않되니 화도 납니다.
> 정말 델파이에는 이러한 기능이 없는 걸까요 ??
> 그렇다면 파일을 불러와 Byte 단위로 처리해야하는 경우에는 어떻게 할수 있을까요 ??
>
>
> 않되고 있는 소스예제 (시도 1)
> var
> arr1 :array of byte ;
> fh:file of byte ;
> begin
> setlength(arr1,100) ;
> assignfile(fh,'c:autoexec.bat') ;
> reset(fh) ;
> blockread(fh,arr1,100) ;
> end; //결과를 보시면 않되는 것이 확인 될 것입니다.
>
> 소스 예제 (시도 2)
> var
> arr1 :pchar;
> fh:file of byte ;
> begin
> getmem(arr1,100) ;
> assignfile(fh,'c:autoexec.bat') ;
> reset(fh) ;
> blockread(fh,arr1,100) ;
> edit1.text:=arr1[1] ;
> end; //이것은 파스칼이 c와 달리 포인터와 배열을 별개의 것으로 처리하는데서
> //비롯되것 같은데 제가 원하는 딱 그부분이 않되고 있는것입니다.
>
>
> 그외에 포인터 변수를 2개 선언해서 주소 넘기고,기타등등 않해본것이 없습니다.
> 헌데,제가 원하는 결과를 얻지 못하고습니다.
>
> 저는 지금 파일을 불러와 바이트 단위로 처리를 하여 다시 저장하는
> 루틴을 짜야 하는데 윗 루틴이 필요합니다.
>
> 단,포인터 변수에 불러놓고 포인터를 inc,dec등으로 왔다 갔다 해서
> 읽어오는 방법은 너무 불편하여 사용하기가 힘이 듭니다.
> 왜냐면 저의 경우는 직접 arr1[100], arr1[30] 과 같이 직접 위치로
> 가야 하기 때문입니다.
> (만약 inc,dec등으로 처리한다면 포인터를 왔다리 갔다리 해야 하니까
> 너무 무식한 프로그래밍 같아서요)
>
> 제가 불평만 늘어 놓았는데
> 그도 그런것이 이것을 잡고 벌써 1주일째 해결방법을 못찾고 있습니다.
>
> 혹시나 아시는 불이 계시면 저좀 구제해 주세요.
>
> (그리고,제가 올린 첫번째 방법이 않되는것은 정말 이해가 않됩니다.
> 그것은 당연히 되어야 하는것 아닙니까 ?)
>
>
>
>
>
>
>
>