2012-01-22 17 views
1

open()システムコールを使用する必要がある学校向けのXcodeを使用してプログラムを作成しています。私は
int input_file_desc = open(input_path, O_RDONLY);
printf("input file desc %d:\n", input_file_desc);C/C++ではopen()でファイルを開く必要がありますか?

を行うと、それは-1を思い付きます。ファイルのパスは〜/ data_to_readです。 xcodeにコマンドライン引数を設定しました。 input_pathは、コマンドラインから取得するconst char *です。何らかの理由で、ファイル名とコマンドライン引数を〜/ data_to_read.txtに変更するとうまく動作します。もっと情報が必要な場合はお知らせください。ありがとう。

EDIT:それは問題があるかどうかを確認するために.txtを試しただけですが、最初に拡張子が必要な理由はまだ分かりません。あなたは拡張機能がないファイルを持つことができますか?この場合、ファイルパスと引数のどちらも拡張子がない限り、正常に動作するはずです。

+2

拡張子は*名前の一部です。ファイル名は '' data_to_read.txt ''であり、' 'data_to_read" 'ではありません。 –

答えて

2

Cを使用しているようですが、なぜC++タグなのでしょうか?それは許されますか? C++にはファイルを操作するための簡単で良いクラスがあります。

拡張子をファイル名(input_path)に含めることは間違いありませんが、名前が同じで拡張子の異なる複数のファイルが同じディレクトリに存在するため、どちらを開く必要がありますか?

EDIT:ファイル拡張子は(特にUNIXのようなOSでは)「援助する」ことしか知られていないが、それらは本当に本質的ではないことを知っておくべきである。たとえば、C++コードを含むファイルを持つことができます。ただし、拡張子がない場合はfooという名前(またはfoo.barなどの拡張子が狂っている場合もあります)など、拡張子は.cppです。それでも、g ++を使ってコンパイルすることができます。拡張子は、そのファイルを使用するアプリケーションに有効なコンテンツであれば、実際には重要ではないからです。

+0

これはC++ファイルです。私はxcodeとg ++でターミナルで試してみましたが、どちらもうまくいきませんでした。それがC++タグの理由です。しかし私はopen()がcコマンドであるとも考えました。したがって、cタグ。 – Marty

+0

私は端末のdata_to_readファイルをチェックしたときに何らかの奇妙な理由があっても、それは.txtを持っていると言いました。理由は分かりません。しかし、私はそれを追加/削除する前に間違いなくそれを持っていませんでした。 – Marty

+0

ファイルが存在せず、端末がそれを言ったということですか?私は本当にLinuxには入っていませんが、拡張機能は実際には「拡張機能」ではないことがわかっているはずです。ファイル名には拡張子がない可能性がありますので、問題はありません。拡張は何も「本物」ではない。 –

1

あなたの質問を理解する方法は、ファイルがCのオープン関数で開くように拡張子を持つ必要があるかどうかを尋ねています。それに対する答えは「いいえ」です。 Cはあなたのための魔法もなく、あなたが指定したファイル名でファイルを開こうとします。ファイルに拡張子がある場合は、それをapiで指定する必要があります。

何が間違っているかを見つけるために、errno変数(strerrorまたはperrorを使用して人間が判読可能なエラーメッセージを表示)で返されたエラーコードを確認します。それは正しい方向に向けるべきです。

0

ファイル名には拡張子は必要ありません。ファイル名は "data_to_read"とすることができます。しかし、システム上のほとんどのファイル名はです。には拡張子が付いています。プログラムからファイルを開くには、この拡張子を指定する必要があります。

エクスプローラでファイルを右クリックし、[プロパティ]を選択して、ファイル名に拡張子が付いているかどうかを確認します。または、Windowsのコマンドプロンプトでファイルを確認してください。

+0

ehh ... xcode = mac :) – Marty

1

他の人が言ったように、拡張子は単に名前の一部です。

あなたのOSはWindowsで、マイクロソフト社の人たちはデフォルトで拡張子を「隠している」というこの馬鹿げた考えを持っていたので、あなたのファイルは「test」という名前になっているようです.txt "はメモ帳で作成されたためです。

Windowsシステムでは、「foo.txt.txt」というファイルを表示するのが一般的です。これは、表示/推測/自動的に拡張機能を追加するという全く愚かな考えがうまく機能しないためです。

ファイル拡張子が常に表示されるように、コンピュータの設定を行うことができます。これはWindowsシステム上で行うのが最適です。プログラミングに興味がある方は、プログラマーには敵意の少ないlinuxのような環境にプログラミングを切り替えることも考えられます。

+0

私はファイル拡張子の愚かな隠蔽に関するあなたの議論に同意します。しかしそれはOPに適用されますか?彼はWindows上にいません。実際に私は彼が私達にそのマックを教えてくれるのを見ます。 – ScrollerBlaster

+0

@ScrollerBlaster:申し訳ありませんが、あなたは100%正しいです...私は彼/彼はxcodeを使用していた逃した。私のMac mini(Snow Leopard)では、ファインダーのオプションに「すべてのファイル名の拡張子を表示」チェックボックスがあり、それがチェックされていない場合でも、すべてのファイル拡張子を見ることができます。 – 6502

+0

@ 6502そうですが、気づいたのですが、「すべてのファイル名の拡張子を表示」をチェックすると、表示されるのは.app拡張子だけでした。私はそれが "show filename extensions"の代わりに "show all filename extensions"だと仮定しています。奇妙なことは、それがファインダー内の拡張子なしで端末に表示されていたことでした。しかし、私はファイル名から ".txt"を削除した時点でショーのファイル拡張子を消してしまったので、削除する代わりに隠しておいたほうがいいでしょうか? – Marty

関連する問題