web-dev-qa-db-ja.com

SImpleCプログラムがファイルを開く

「write.txt」というファイルを開くプログラムを作成しようとしています。

#include <stdio.h>

main() {
    FILE *fp;
    fp = fopen("write.txt", "w");
    return 0;
 }

これは機能する必要がありますか?何も返さないからです。

7
user485498

mainの古いバリアントを除いて、そのコードに実際には多く間違っているわけではありません。エラーがなければ、ファイルを作成する必要があります。

ただし、fopenからの戻り値をチェックしていないため、何らかのエラーが発生し、それを認識できない場合があります。

私はから始めます:

#include <stdio.h>
#include <errno.h>
int main (void) {
    FILE *fp;
    fp = fopen ("write.txt","w");
    if (fp == NULL) {
        printf ("File not created okay, errno = %d\n", errno);
        return 1;
    }
    //fprintf (fp, "Hello, there.\n"); // if you want something in the file.
    fclose (fp);
    printf ("File created okay\n");
    return 0;
}

ファイルが作成されていないことを断固として主張しているが、上記のコードが作成していると言っている場合は、恐ろしい「IDEが思っているものとは異なるディレクトリで動作している」シンドロームの犠牲者になる可能性があります:-)

一部のIDE(Visual Studioなど)は、<solution-name>\bin<solution-name>\debugなどのディレクトリにあるときに実際にコードを実行します。あなたは置くことによって見つけることができます:

system ("cd"); // for Windows
system ("pwd") // for UNIXy systems

コードにアクセスして、実行されている場所を確認します。 それは相対パスライン"write.txt"を指定した場合にファイルが作成される場所です。それ以外の場合は、絶対パスを指定して、ファイルシステムの特定のポイントで絶対パスを作成しようとすることができます。

13
paxdiablo

Write.txtファイルの内容を印刷したいと思います。 (文字が含まれていると想定します)。

#include <stdio.h>

int main()
{             

    FILE *fp,char ch;

    fp=fopen("write.txt","r");

    if(fp==NULL)
    {
        printf("Some problem in opening the file");
        exit(0);
    } 
    else
    { 
        while((ch=fgetc(fp))!=EOF)
        {
            printf("%c",ch);
        }
    }

    fclose(fp);

    return 0;  
}
2
Algorithmist

'return'とは何を期待していましたか?ファイルを開きます。ほとんどのプラットフォームでは、ファイルが存在しない場合はファイルを作成します。

おそらく最後にファイルをfclose(fp)する必要があります。

2
Martin Beckett

ファイルの操作を始める前に、Cでさらにいくつかの基礎を学ぶ必要があると思います。戻り値とは、呼び出された関数から呼び出し元のコードにデータが返されることを意味します。この場合、プログラムの最後に0を返します。新しいファイルを作成する以外は、FILEポインタで何もしませんでした...

0
in70x