[win] 파일 생성

나는오리의 이미지

C:\abc\abcd\란 폴더에서 A라는 프로그램이 있고
이 프로그램을 실행시 파일 생성 루틴을 지나게 됩니다.
파일을 생성할 때 fopen을 사용하는데

fopen("ABCD.TXT", "wb");라고 한것과 fopen("c:\\abc\\abcd\\ABCD.TXT", "wb");와 차이가 있습니까?

전자로하면 생성이 안되는데 후자로하면 생성이 됩니다.

현재 상황을 설명드리자면 A라는 프로그램은 B라는 프로그램에서 실행시켜줍니다.

즉, B실행 -> (B가)A실행 -> A에서 "ABCD.TXT"파일 생성

절대경로를 지정하지 않으면 실행파일 위치에 파일을 생성하게 되는데
이상하게도 위와 같이 절대경로를 지정하지 않으면 생성이 안되는 문제가 있습니다.

그런데 이녀석이 골때리는건 A프로그램을 직접 실행시키면 "ABCD.TXT"라는 파일이 생성된다는 겁니다.

환경은 VC 6.0입니다.

추가

파일 생성 루틴을 타기전에 파일이 생성되어 있는지 체크합니다.
체크방법은

fileok = fopen("ABCD.TXT","r");

입니다.

아무래도 체크방법에 문제가 있는것 같은데
_access대신 fopen으로 체크한건 소스를 받아서 쓰는거라
여러곳을 수정하기 싫어서 그냥 그대로 이용했는데 ㅠ.ㅠ

현재 울고싶은 상황입니다.

kimkh0304의 이미지

절대 경로를 지정하지 않으면 현재 디렉토리에 저장하지 않나요?

B가 A를 실행시킨 상황에서
fopen("ABCD.TXT", "wb"); 하기 전에 A프로그램의 현재 디렉토리를 확인해 보는게 좋을 것 같네요..

나는오리의 이미지

kimkh0304 wrote:
절대 경로를 지정하지 않으면 현재 디렉토리에 저장하지 않나요?
저도 그렇게 생각하는데요.
로그를 만들어서보니 그냥 지나가버리네요. -_-;

kimkh0304 wrote:
B가 A를 실행시킨 상황에서
fopen("ABCD.TXT", "wb"); 하기 전에 A프로그램의 현재 디렉토리를 확인해 보는게 좋을 것 같네요..
이건 어떤식으로 확인해봐야 하나요?
A프로그램의 현재 위치는 당연히 "C:\abc\abcd"로 나올텐데요.
혹시나 모르니 이것부터 해봐야겠네요.
머리로 생각하는것과 실제는 다를 수 있으니까요. ^^;
kimkh0304의 이미지

A프로그램을 수정할수 있다면.. GetCurrentDirectory 함수로 알수 있습니다..

만약 B가 A를 system함수로 실행시켰다면
A의 기본 작업 디렉토리는 B의 작업 디렉토리가 되네요..

나는오리의 이미지

kimkh0304 wrote:
A프로그램을 수정할수 있다면.. GetCurrentDirectory 함수로 알수 있습니다..

만약 B가 A를 system함수로 실행시켰다면
A의 기본 작업 디렉토리는 B의 작업 디렉토리가 되네요..

답변 감사드립니다.
윗글 쓰고 확인해보러 갔다가 지금 왔습니다. ㅡ.ㅡ;

이 잡것(?)이 C:\Program Files\ 아래의 외부 프로그램의 실행파일이 있는곳을 잡고있더군요.
B프로그램을 C프로그램(외부 프로그램)에서 호출하는데
이것때문에 C:\Program Files\ 아래를 잡고있는가 봅니다.
우찌 이런일이 가능한지...

freezm7의 이미지

욕심많은오리 wrote:

이 잡것(?)이 C:\Program Files\ 아래의 외부 프로그램의 실행파일이 있는곳을 잡고있더군요.
B프로그램을 C프로그램(외부 프로그램)에서 호출하는데
이것때문에 C:\Program Files\ 아래를 잡고있는가 봅니다.
우찌 이런일이 가능한지...

MSDN 에서 CreateProcess 를 찾아보시면 lpCurrentDirectory 파라미터에 대해 다음과 같이 쓰여 있습니다.
Quote:

[in] Pointer to a null-terminated string that specifies the full path to the current directory for the process. The string can also specify a UNC path.
If this parameter is NULL, the new process will have the same current drive and directory as the calling process. (This feature is provided primarily for shells that need to start an application and specify its initial drive and working directory.)

즐겁게 살아 볼까나~*

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.