私はこのコードを何時間も機能させようとしてきました! 私がする必要があるのは、ファイルを開いて、それが本物で読み取り可能かどうかを確認することだけです。私はCに慣れていないので、何か愚かなものが欠けていると確信しています。コードは次のとおりです (簡略化されていますが、コピーされています)。
#include <stdio.h>
main() {
char fpath[200];
char file = "/test/file.this";
sprintf(fpath,"~cs4352/projects/proj0%s",file);
FILE *fp = fopen(fpath,"r");
if(fp==NULL) {
printf("There is no file on the server");
exit(1);
}
fclose(fp);
//do more stuff
}
また、読み取り権限のある実際のファイルをパスが正しく指定していることも確認しました。他のアイデアはありますか?
編集1: fpathが「〜cs4352/projects/proj0/test/file.this」になることは知っています
編集 2:絶対ファイル パスを使用してみました。どちらの場合も、ls を使用してパスが適切に構築されていることを確認できます。
編集 3: 2つありerrno
ます...現在、Google でそれが何を意味するのかを追跡しようとしています。
編集 4: わかりました、errno
2 の「そのようなファイルまたはディレクトリはありません」です。fopen の参照パスが「/home/courses1/cs4352/projects/proj0/index.html」であり、存在することを確認し、それに対する読み取り権がある場合に、これを取得しています。以下にリストされている C コードに関しては、セマンティック/初心者向けのエラーがいくつかある可能性がありますが、gcc はコンパイル時に警告を表示しません。コードはerrno
、2 を吐き続けていることを除いて、本来のとおりに機能します。つまり、すべての文字列/文字配列が正しく機能していることはわかっていますが、問題になる可能性があるのはfopen()
呼び出しだけです。
解決策: わかりました、access() プロシージャが私を最も助けてくれました (そして、それを行うためのよりエレガントな方法は言うまでもなく、コードが少ないため、私がまだ使用しているものです)。この問題は実際には、私が皆さんに説明しなかったことに起因していました (なぜなら、私は access() を使用するまでその問題に気付かなかったからです)。ファイルを取得するために、strtok() を使用して文字列を分割し、" \n" でのみ分割していましたが、これは UNIX システムであるため、"\r" も追加する必要がありました。それを修正すると、すべてがうまくいき、 fopen() 関数も同様に機能すると確信していますが、テストしていません。
皆様の有益な提案に感謝します。特に、この素晴らしい解決策を見つけてくれた Paul Beckingham に感謝します。
乾杯!