안녕하세요. 까마귀입니다.
Socket을 이용해서 Server에 있는 파일과 Client에 있는 파일을 비교를 합니다.
그 결과 서로 틀리면 Server에 있는 파일을 내려받기를 해서 Server에 있는 파일과
동기화 되도록 구현을 했습니다.
Server에 데몬을 띄워놓고 사용하는 방법인데요.
Server에 Client가 하나만 접속을 해서 내려받기를 하면 아무런 이상이 없는데요.
만약 둘이상의 Client가 접속을 해서 내려받기를 하니까 I/O Error 32가 나더군요.
또, Stream Read Error도 발생을 합니다.
내려받기를 할때, FileStream을 선언을 해서 하도록 했습니다.
위와 같은 상황에서 둘이상의 Client가 동시에 내려받기를 해도 이상없이 동작을
하려면 어떻게 해야 할까요?
위대한 단군혼이 살아있는 나라.... 대한민국.
델파이에서는 기본적으로 읽기 모드로 열어도 배타적으로 열고,그리고 열립니다.
이예기는 모냐면
다른 프로그램에서 파일을 사용하고 있다면 못연다는 이야기 입니다.
이것은 다른 프로그램에서 파일을 사용하고 있다가
delphi에서
assignfile(f_n,filename) ;
reset(f_n);을 해보면 안열리는것이 확인이 되것입니다.
그리므로,가급적 파일을 관리할때는 api를 하용하는 것이 좋습니다.
예제를 하나 드리죠
uses Windows, ...
var
file_n:integer;
buffer:tstringlist ;
..
..
begin
..
..
file_n:=openfile(pchar(filename),ofstr,of_read) ;
f_n:=getfilesize(file_n,0) ;
c_l:=0 ;
t_size:=0 ;
setfilepointer(file_n,0,nil,0) ;
while t_size
KK:='' ;
c_l:=0 ;
readfile( file_n,rsv_char,42,c_l,nil) ;
t_size:=t_size+c_l ; //c_l에는 실제로 읽혀진 바이트가 들어갑니다.
KK:= copy(rsv_char,1,c_l) ;
buffer.add(KK) ;
END ;
end;
예를 들어