Q&A

  • AssignFile 상대경로
Turbo Delphi 공개판을 사용중인 뉴비입니다.

exe가 위치한 폴더 아래, data라는 폴더속에 a.txt에다가 텍스트를 작성하기 위해서 다음과 같으 ㄴ코드를 작성했습니다.
<!--CodeS-->
AssignFile(F, '.\data\a.txt');
ReWrite(F);
WriteLn(F,'test');
CloseFile(F);
<!--CodeE-->
하지만 ReWrite(F)에서 멈추면서

EInOutError클래스에서 Invalid filename이라며 에러가 발생했다고 하네요.
'a.txt'를 넣거나, 절대경로를 넣는경우에는 작동하는 것으로 봐서는 .\를 붙인 상대경로에서 오류가 나는 것 같더라고요.
어쩔 수 없이 ExtractFilePath(Application.ExeName)를 붙여서 쓰긴 하는데...

무엇이 원인일까요?
그전에 Delphi 6 Personal을 구해다 쓸 때 만든 프로그램에서는 .\가 붙은 상대경로가 멀쩡히 작동한 기억이 있어서 그 코드를 붙여넣어도 같은오류네요.
4  COMMENTS
  • Profile
    구창민 2009.08.24 18:34
    안녕하세요..
    코드는 문제 없어보이는데..
    개발하시는 PC 의 OS 가 비스타가 아닌지요?
    비스타의 경우 관리자가 아니면 쓰지 못하는 디렉토리 일수 있을거 같습니다.
    비스타 시라면 델파이를 관리자 모드로 띄우고 실행해보세요.
    혹은 실행파일을 관리자 모드로 ...
    그럼 즐거운 프로그래밍 하시구요~
  • Profile
    이성찬 2009.08.26 06:22
    KDDG_MIN//답변 감사합니다. 하지만 윈도 xp sp3인걸요ㅠ
  • Profile
    구창민 2009.08.26 22:19
    안녕하세요..
    제가 TurboDelphi 가 없어서 테스를 못해보았는데..
    정품으로 테스트시 Vista, XP 에서 아무 문제 없이 동작하는 코드구요..

    첨언을 좀 드리면.. 위와 같이 코딩하는 방식보다는 아래처럼 함수를 만들어서..
    function ConcatPath(const p1, p2: string): string;
    begin
    if p1 = '' then
    Result := p2
    else if p1[length(p1)] = '\' then
    Result := p1 + p2
    else
    Result := p1 + '\' + p2;
    end;

    이 함수를 호출해서 아래처럼 안정적으로 사용하시는게 어떨까요..

    AssignFile(F, ConcatPath(ExtractFilePath(ParamStr(0)), 'data\a.txt'));

    그럼.. 항상 즐거운 프로그래밍 하시길~

  • Profile
    이성찬 2009.08.27 02:47
    KDDG_MIN//아, 여기서도 작동 잘 됩니다 ^^ 감사합니다. 아직 배우는중이라 이런면에서 좀 부족한듯 하네요 ^^
    즐거운 프로그래밍 하세요~
    • 이성찬
    • 2009.08.24 03:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.24 18:34
      안녕하세요.. 코드는 문제 없어보이는데.. 개발하시는 PC 의 OS 가 비스타가 아닌지요? 비스타의 경우...
    • 이성찬
      2009.08.26 06:22
      KDDG_MIN//답변 감사합니다. 하지만 윈도 xp sp3인걸요ㅠ
    • 구창민
      2009.08.26 22:19
      안녕하세요.. 제가 TurboDelphi 가 없어서 테스를 못해보았는데.. 정품으로 테스트시 Vista, XP 에서 ...
    • 이성찬
      2009.08.27 02:47
      KDDG_MIN//아, 여기서도 작동 잘 됩니다 ^^ 감사합니다. 아직 배우는중이라 이런면에서 좀 부족한듯 하네...
    • 박진수
    • 2009.08.21 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.08.23 09:22
      폴더에 대한 옵션이 많아서 그런가 봅니다. 비스타에선 기본적으로 폴더를 생성하면 [고급특성]에서 '...
    • 치꼬
      2009.08.22 02:51
      배우는 단계에서는 그닥 차이점은 중요하지 않을듯합니다.
    • 윤영훈
    • 2009.08.20 04:14
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.08.20 20:31
      ShowMessage대신에 MessageBox나 MessageDlg함수를 쓰세요...
    • 장성호
      2009.08.21 00:49
      //다음과 같이 만들어서.. procedure ShowMessageEx(const sTitle:String;const sMsg:String); b...
    • 성더기
      2009.08.22 02:32
      위에 방법도 있구요 델파이 메뉴의 프로젝트 > 프로젝트 옵션 > 프로그램 타이틀을 다른 바꾸시면...
    • 장성호
      2009.08.22 10:00
      Application 타이틀을 바꿔서도 가능하네요 다음과 같이 Application.Title을 변경해서도 구현이 가능...
    • 윤영훈
      2009.08.25 20:13
      감사합니다~ 한번씩 다 확인해고 제일 맞는 걸로 사용해야겠네요. 도움 주신 분들 정말정말 감사해요~
    • 최용일
      2009.08.18 18:43
      상용이구요... 아래 홈페이지에서 구매하실 수 있습니다. http://www.devart.com/dac.html
    • 조상은
      2009.08.18 19:25
      최용일님 정말 감사합니다. 알려주신 사이트 들어가서 보니 SQL에 직접 붙일 때 사용하는 컴포넌트이...
    • 조상은
      2009.08.18 20:12
      위의 글을 작성하다보니 install package에서 runtime packages 에 정의된 목록이 의심이 가서 다른 정상...
    • 문병구
    • 2009.08.15 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2009.08.15 09:16
      흠...보통 스캐너에서 바코드번호와 엔터값이 넘어옵니다. 따로 자릿수 처리를 할 필요가 없을껀데요.....
    • 아르스
      2009.08.18 00:15
      백록화 님의 말씀 처럼 OnKeyPress 나 OnKeyDown 이벤트에 if Key = #13 then begin ..... end; 또는 i...
    • 문병구
      2009.08.18 01:21
      맞네요..제가 착각을 했네요... 바코드 값이 읽어지는 것은 마치 키보드에 값을 넣고 모두 넣은 다음 엔...
    • 김동원
    • 2009.08.14 18:55
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.15 02:41
      안녕하세요.. 우선 그 네개의 TMemo 콘트롤의 크기가 동일하다는 가정하에 아래 예제를 따라해보세요....
    • 김동원
      2009.08.15 22:27
      초보가 이해하긴 대단히 어려운 내용같습니다.. 하여간, 좋은 답변주신데 대해 , 저의 감사의 마음을 ...
    • 구창민
      2009.08.17 19:09
      조금 설명을 달아 보겠습니다.. 음.. FOldMemoWndProc 는 함수포인터라고 하는건데.. 일종의 변수라고...
    • 김동원
      2009.08.19 02:08
      어렴풋이 이해할수있게되었습니다. 정말 감사합니다.그런데 실제로 코드를 입력해보니 아래와 같은 오류...
    • 구창민
      2009.08.19 18:25
      동원님.. 위에러만 봐서는 상황을 알 수 없고요... 에러나는 부분의 함수부분만이라도 떼서 올려보세요....
    • 김동원
      2009.08.21 01:03
      님께서 올려주신대로 새로 코드를 써서 만들었더니 잘 됩니다. 그런데 문제는 다른데 있었던것 같습니다. ...
    • cdrd
    • 2009.08.13 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2009.08.14 18:24
      위 질문중 1번에서 ADO,BDE 두가지만 말씀드릴수 있습니다. 제가 경험한 것이 이것 뿐이라서요.(저는 초...
    • 현실환
      2009.08.18 21:16
      Antialiased Drawing을 할려면 GDI가 아닌 GDI+ 함수를 이용해야 합니다. 컴포넌트 자체는 TImage를 그...
    • 오델로
    • 2009.08.12 19:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2009.08.12 21:28
      10분에 천원이면...한시간에 6천원...하루에 14만4천원? 뜨억 @.@;; ㅋㅋ 설마 이렇게 많이 받지는 않겠죠...
    • 오델로
      2009.08.12 22:54
      아 완전 깔끔한 한방이네요 ㅠ.ㅠ 완전 감솨*10000000000000000000 소중하게 보겠습니다... Edit6....
    • 김병윤
      2009.08.13 01:46
      Format에 관해서 따로 알아두시는게 좋으실텐데 여기다 다 설명드리기는 좀 그렇고 대략...설명하자면 ...
    • 오델로
      2009.08.19 18:24
      이제서야 답변봤네요^^ 유용한 답변 감사합니다...^^ 복사해서 따로 저장후에 써야겠네요 ㅋ즐거운 하루...
    • 이훈
    • 2009.08.12 08:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.12 18:45
      코드를 올려보세요..
    • 김병윤
      2009.08.12 21:37
      폼.Hide 때문입니다. 번쩍하고 사라지지 않습니까? 폼.Show; 로 폼을 호출하면 그 아래 코드까지 일사...
    • 구창민
      2009.08.12 20:49
      아래 코드 한줄을 추가해 보세요.. Application.ProcessMessages; fmInfoProgress.Show; 즐거운 ...
    • 김병윤
      2009.08.12 22:15
      Application.ProcessMessages; 요놈이 루프 안에 있어야 원하시는 결과를 얻으실 수 있을 듯 합니다. ^^
    • Hyphen
      2009.08.12 22:56
      fmInfoProgress.Show; Application.ProcessMessages; 순서를 이렇게 하니까 보이는 군요.. 대단히 ...
    • 치꼬
      2009.08.12 06:21
      내용은 정확히 파악은 잘 안되지만요. 위의 문장이 안되는건.. 말그대로 edit2.text 가 '' 것이 아니라...
    • 구창민
      2009.08.12 19:15
      안녕하세요.. 아래와 같은 문자열을 날짜로 치환하는 문장으로 해결하실수 있을거 같네요.. if Str...
    • 오델로
      2009.08.12 19:38
      답변 무한감사드립니다^^;; 아직 완전 백지상태라서 무작정 삽들고 파대기 시작하는중이라 답답합니다...
    • 백록화
      2009.08.11 21:32
      리더기가 시리얼통신을 사용한다면 관련 시리얼통신 콤포넌트에 데이터읽기 이벤트에서 제어를 해주심돼...
    • KDDG_Apine
      2009.08.12 04:12
      밑에 같이 id 컴포넌트를 사용하면 됩니다. ^^ 제가 사용했던부분인데.. 될겁니다. var nDate,...
    • 김지호
      2009.08.24 18:27
      답변 감사합니다 ^^