• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストファイルを開きたいです。)

テキストファイルを開く方法と作成方法

このQ&Aのポイント
  • C言語を勉強し始めて4ヶ月の私が、テキストファイルを開く方法と作成方法について質問です。
  • system( )以外の方法でテキストファイルを画面上に開く方法を知りたいです。
  • また、テキストファイルを名前.txtで作成し、作成直後に開く方法についても教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> //ファイルを開く > sprintf(cmd_fileopen,"\"notepad %s\"",cmd_idname); > system(cmd_fileopen); ああ、うまくいかないのは \" を使ってるからですね。 こうすると system に渡る文字列自体に"がついて "notepad c:/doc/hoge.txt" のようになりますが、そうするとこの文字列全体をコマンド名と解釈するはずです。 ですので、 sprintf(cmd_fileopen,"notepad %s", cmd_idname); のようにしてやれば起動できるようになると思います。 >>snprintf(cmdbuf, sizeof cmdbuf, "notepad %s", cmd); >snprintf()って関数でしょうか? はい。sprintfでの出力先のバッファサイズを指定できるようなものです。 昨今はバッファオーバランやらなんらやにやかましいので この手の関数を使うほうが多いもので。 Manpage of PRINTF http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html ↑にsnprintfの説明もあります。 > cmdbufはchar cmdbuf[128]とか適当でいいですか? >(文字列+1)の数の宣言にした方がいいのでしょうか? これはsnprintfの場合の話ですか? であれば、 > snprintf() と vsnprintf() は、 size バイトを越える文字数を書き込まない (size には文字列を終端する aq\0aq もを含まれる)。 ですので、何も考えずにバッファの大きさを渡せばいいです。 > cygwinを入れているからややこしいのでしょうか? > sh (エラー内容) がコンパイルするとでるので、アドレスの指定が > ¥ ではなく / でないといけないとUNIXは分からないのかなとか、 > いろいろ考えている間に、ごちゃごちゃになってしまいました(泣)。 Windows形式のパス区切りとUNIX形式の区切りを混ぜると混乱しやすいので 統一したほうがいいでしょうね。 ドライブが絡まなければUNIX形式でいいと思います。 cygwinはまあ、事情をわかった人が使うものだと思うので、何かを覚えるために使うというのは ちとつらいような気もします。 #いろいろ「クセ」がありますから

akimasabon
質問者

お礼

ありがとう御座いました。 sprintfでうまく開く事ができました。 ただ、snprintf() はVC2008で確認した所、エラーで返ってきました(泣)。 使える関数だなと思ったのに・・。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

Visual Studio 2008 であれば、ちょっと違う名前で同じ機能の 関数を持っていますから、それを使ってみてはどうでしょう。 _snprintf_s、_snprintf_s_l、_snwprintf_s、_snwprintf_s_l (CRT) http://msdn.microsoft.com/ja-jp/library/f30dzcf6(VS.80).aspx この他にも、同様にしてバッファのサイズも引数に取るようにして チェックを強化した関数がいろいろありますから興味と時間があれば 見てみると良いかもしれません。 CRT 関数のセキュリティが強化されたバージョン (CRT) http://msdn.microsoft.com/ja-jp/library/wd3wzwts(VS.80).aspx が、今度は逆に他のコンパイラを使うときに苦労したりする可能性があるので 注意してください。

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>テキストファイルを画面上に開きたい・・  ファイルオープン、fopen() と  (ファイル終了まで)  1行ずつ読み込み、fgets() と  1行ずつ画面出力、printf() でよいのではと・・(◆)。  (ファイル終了 fclose() )  http://www.bohyoh.com/CandCPP/C/Library/index.html >system()以外にありますでしょうか?  質問主旨は、件名の「テキストファイルを開きたいです。」ではなく、Cプログラムからの「アプリケーションの起動方法」でしょうか?。 ただ単に、 >作成直後に確認のため、名前.txt を開くといった事をしたいです。 のであれば、C言語にこだわらず、  コマンドラインから、   >cd c:\kadai_k   >attrib +R 名前.txt   >type 名前.txt  が簡単かと。 >特定の1つのファイルしか開けないので、困っています。  テキストファイルがたくさんあるのなら、バッチファイルにするとか・・。 ------------------------------------ C言語にこだわるのならば、少なくとも、notepad の部分は、冒頭(◆)の方法にした方がよろしいのでは。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

やり方はいろいろありますが、 cmd = "c:/test/test.txt"; snprintf(cmdbuf, sizeof cmdbuf, "notepad %s", cmd); system(cmdbuf); みたいにsystemに渡す文字列を組み立てるとか。 > namefile[128]といった文字列に"notepad c:/test/test.txt"を入れて、 > system(namefile)としたところ、 > シェルで認識できませんといった内容が表示されてできませんでした。 具体的にはどんなコードを書いたのですか? > system("notepad c:/test/test.txt"); > (¥では上手くいかず、↑なら開けました) \\ と書けばうまくいくでしょう。

akimasabon
質問者

補足

回答有難う御座います。 char id[4]; cahr cmd[128]; char cmd_idname[128]; char cmd_yomi[128]; char cmd_fileopen[128]; id="1"; sprintf(cmd_idname,"%03s.txt",id); //ディレクトリ移動 system("cd c:/kadai_k/"); //ファイルの属性を読み取り専用へ変更 sprintf(cmd_yomi,"\"attrib +r %s\"",cmd_idname); system(cmd_yomi); //ファイルを開く sprintf(cmd_fileopen,"\"notepad %s\"",cmd_idname); system(cmd_fileopen); といったような感じです。 >snprintf(cmdbuf, sizeof cmdbuf, "notepad %s", cmd); snprintf()って関数でしょうか? sprintf()ならsizeof cmdbufって間に入れるんですね~。 知らなかったです(汗)。 cmdbufはchar cmdbuf[128]とか適当でいいですか? (文字列+1)の数の宣言にした方がいいのでしょうか? cygwinを入れているからややこしいのでしょうか? sh (エラー内容) がコンパイルするとでるので、アドレスの指定が ¥ ではなく / でないといけないとUNIXは分からないのかなとか、 いろいろ考えている間に、ごちゃごちゃになってしまいました(泣)。

関連するQ&A

専門家に質問してみよう