CD-ROMからexeを起動するとファイルを読み込まない

このQ&Aのポイント
  • 自作したゲームのexeファイルを起動したところ、ファイルを読み込んでくれないので困っています。
  • CD-ROMに焼いてから、CD-ROMからexeファイルを起動させるとファイルを読み込んでくれません。
  • 開発環境は、VS.NET2003 C++です。別の方法でファイルを読み込むことはできないでしょうか?
回答を見る
  • ベストアンサー

CD-ROMからexeを起動するとファイルを読み込まない

自作したゲームのexeファイルを起動したところ、ファイルを読み込んでくれないので困っています。 自分は、 if(NULL == (fp = fopen("ファイル名","r+t")))  としているのですが、普通にWindows上でexeを起動すると普通に読み込んでくれるのですが、何故かCD-ROMに焼いてから、CD-ROMからexeファイルを起動させるとファイルを読み込んでくれません。 他の方法でfopen("../フォルダ名/ファイル名")にしても駄目でした。  なにか別の方法がないのでしょうか? 教えていただけると助かります。 ちなみに開発環境は、VS.NET2003 C++です。

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

  • ベストアンサー
  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

fopen("ファイル名","r+t") "t"が何だったか記憶が定かでないですが "r+"は、読み込みと書き込みの引数じゃなかったでしょうか? CDは当然読み取りのみ可能なデバイスですので、書き込み属性でファイルを開こうにも開けないので、fopen自体が失敗するんじゃないのかな?

dotneer
質問者

お礼

試してみたところ、それで動きました。 ひょっとしたらと思ったんですけどあまり試さずに質問しました。確かに書き込み不可なCDからr+とかwとかやったら不味いですね。  ご指摘ありがとうございます。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

>r+tのtというのはテキストモードといわれるものです。 それは先にも書いた様にC言語では、 環境によってはそうならない物のありえますということです。 また、今回の問題の本質は、経験者の方なら分かると思いますが、 テキストモードの指定とはなんら関係ありません。 問題は"+"によるRead/Writeの指定によるものです。 なので、C言語で規定されているモードをNo2にて列挙しました。 "+"を指定することによってどういう事が起こるのかを きちっと理解していただきたかったためです。

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

>if(NULL == (fp = fopen("ファイル名","r+t"))) "t"というモードは存在しません。 C言語で規定されているのは以下のモードです。 #ただし環境によっては"t"がなにか意味を持つこともありえます。 r:テキストファイルを読取りモードでオープン w:テキストファイルを書込みモードで生成、または長さ0に切り捨て a:ファイルの終わりからの書込みモードでオープンまたは生成 rb:バイナリファイルを読取りモードでオープンする。 wb:バイナリファイルを書込みモードで生成、または長さ0に切り捨て ab:バイナリファイルの終わりの位置から書込みモードでオープン生成 r+:テキストファイルを更新(読取りと書込み)モードでオープン w+:ファイルを更新モードで生成するか、長さ0に切り捨て a+:ファイルの終わりから書込みをモードでオープンまたは生成 r+b(rb+):バイナリを更新(読取りと書込み)モードでオープン w+b(wb+):バイナリを更新モードで生成するか、長さ0に切り捨て a+b(ab+):バイナリをファイルの終わりの位置から書込み > 他の方法でfopen("../フォルダ名/ファイル名")にしても駄目 相対パスにすると、ドライブ文字などは実行されたカレントの ドライブになるので、No1さんの書いていることが起こります。 パスはインストールさせて使うか、もしくは固定の 絶対パスを指定して開くしかないでしょう。 読み込みだけでよいなら"r+"ではなく"r"を指定します。 バイナリならば"rb"を指定することでReadOnlyで開くことが可能です

dotneer
質問者

お礼

 r+tのtというのはテキストモードといわれるものです。 詳しくは  http://www5c.biglobe.ne.jp/~ecb/c/c00.htmlに載っています。  自分はテキストモードにして読み込むようにしてあるのですが、別にtはつけなくてもいいようなので後から外しました。

関連するQ&A

  • CD-ROMからのEXEの起動について

    企業では悪意のあるプログラムを起動させないために、CD-ROMからのEXEファイルの起動をできないようなポリシーをかけているところが多いと思います。この場合、各種PR用のCD-ROM等CD-ROMを挿入するとメニュープログラムがオートスタートするものも起動できません。このようなCD-ROMを個別に閲覧可能とする方法はないでしょうか。例えばオートスタートするプログラム名を個別に指定して起動可能とするようにポリシーを都度変えることはできますが、たいていstart.exeなど簡易なプログラム名なので、プログラム名を詐称して他のプログラムを起動される可能性を考えるとセキュリティレベルが落ちるので採用したくないのですが。よろしくお願いします。

  • VBAのSHELLを用いてEXEファイルを起動したものの、微妙にうまくいかない

    エクセルのVBAのshellを用いて、exeファイルを起動させてました。 exeファイルはCを用いたシンプルなもので、テキストファイルを作成します。(ソースは下記参照) C:\testのディレクトリにエクセルファイルを作成し、 Shell "C:\test\test.exe" を実行させたところ、ファイルはC:\testのディレクトリに出来ずに、マイドキュメントに出来ました。 このexeファイルを直接ダブルクリックしたときは、C:\testのディレクトリにテキストファイルが作成されます。 ダブルクリックしたときと同じように、C:\testのディレクトリにテキストファイルを作成する方法があれが教えてください。 よろしくおねがいします。 (ソース、hello.txtというファイルをつくり、hello!を書く) main( ) { FILE *fp; /* ファイルポインタ */ fp = fopen( "hello.txt", "w"); fprintf(fp,"hello!\n"); fclose(fp); return 0; }

  • 任意のファイルを別のファイルにコピーするプログラム。

    コマンドラインからコピー元、コピー先ファイル名を指定してファイルをコピーするプログラムなんですが… #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { FILE *fp; if ((fp = fopen(argv[0],"r") == NULL){ printf("ファイル%sが存在しません。\n",argv[0]);exit(-1); } if ((fp = fopen(argv[1],"w") == NULL){ printf("ファイル%sがコピーできません。\n",argv[1]);exit(-1); } fclose(fp); } どこか間違っているところがあるでしょうか? ありましたら詳しく教えてもらえると幸いです。 少し自信がないのでわかる方はよろしくおねがいします。

  • .exeファイルが起動できません.

    ・現象  .exeファイルを起動しようとすると,+Lhacaという圧縮解凍ソフトが起動し,起動しようとしたexeファイルのlzh圧縮したファイルをつくってしまいます.  どのexeファイルでも,同じ現象がおこります.  ダブルクリックで起動しても,スタートメニューから起動しても,ファイル名を指定して実行から起動しても,圧縮ファイルができてしまいます.  ただ,.xlsや.docのように,アプリケーションに関連付けられたファイルは開くことができます.  またエクスプローラは,左下のスタートボタンを右クリックすることで起動できます.  .exeファイルの関連付けが変更されたのでは?と考え,ここの質問を参考にし [スタート]-[ファイル名を指定し実行] から command を実行 次のコマンドを実行 C:\>assoc .exe=exefile C:\>ftype exefile="%1" %* を行ってみたのですが,状況は変わりませんでした.  エクスプローラのフォルダオプション,ファイルの種類タブから関連付けを見たのですが,exeは登録がありませんでした.  再起動もしてみたのですが,Windows起動時のスタートアップ等で,自動実行されるファイルの圧縮が行われるだけでした. なんとか元に戻したいと思いますので,何卒宜しくお願い致します.

  • ファイルの出力先がうまく指定できません。。

    今、ファイルの出力先を変更させたいと思っていて、 調べたところ、fp=fopen("フォルダ名/test.txt","wb") のようにすればよい、というところまでは調べたのですが、 私の場合、ファイル名を、filenameというchar型の変数に入れており、 fp=fopen(filename,"wb")となってます。 これを、fp=fopen("フォルダ名/filename","wb")としてみたのですが、 これではダメでした。 ファイル名の入っている変数はそのまま使いたいのですが、 それでパス指定をする方法ありますでしょうか?

  • バイナリファイル

    myfileはバイナリファイルだと思うのですが拡張子がありません。 バイナリファイルには拡張子が必要ないんでしょうか? 普通は myfile.txt とか myfile.bmp など拡張子を指定すると思うのですが。 教えてください。 if((fp = fopen("myfile", "wb"))==NULL) { exit(1); }

  • createprocessで起動させる別.exeをモーダルで起動したい

    createprocessで起動させる別.exeをモーダルで起動したい お世話になります。 VC++6.0 MFCで開発しております。 現在A.exeのあるボタンを押すとcreateprocessでB.exeを起動させるようにしております。 B.exeを起動後、A.exeの画面表示をクリックするとA.exeがアクティブになるのです。 それを、B.exeが終了しないとA.exeがアクティブにならないように変更したいのですがどのようにすればよいでしょうか? 現状は PROCESS_INFORMATION pi; STARTUPINFO si; si.cb=sizeof(si); CreateProcess(実行EXEパス,コマンドライン,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); で起動しております。 また、実現不可能というお答えでもいいので教えていただければと思います。 お手数ですが何卒よろしくお願いします。

  • c言 ファイルのオープンについて

    #include <stdio.h> int main(void) { int ch; FILE *fp; char fname[64]; printf("ファイル名:"); scanf("%s",fname); if((fp=fopen(fname,"r"))==NULL) printf("ファイルをオープンできません。\n"); else{ while((ch=fgetc(fp))!=EOF) putchar(ch); fclose(fp); } return(0); } ファイル名は20130603.cで、実行ファイル(exe)と同じディレクトリに入れてあるのに、このプログラムでファイルをオープンできないのです。 このプログラムを実行するために必要なファイルの作成法と、例としてのファイルの内容、実行結果など、教えていただきたいのです。 色々調べてみたのですが、解決法がイマイチ見つかりませんでした。 どうかよろしくお願いします。

  • HTMLファイルからexeファイルを起動させたい

    イントラネット上のWEBサイトから業務アプリケーション(exe) ファイルを起動させようとしています。ブラウザから起動させようと するとアラートが2個でるのでこれを表示させない方法を教えてください。 現在のHTMLの記述 <a href="\\○○\exe\MENU.exe">  ↑○○というサーバーのexeフォルダにあるMENU.exeを起動 アラート内容1  ファイルのダウンロード:セキュリティの警告   このファイルを実行または保存しますか    ↑このファイルは常に実行したい アラート内容2   発行元を確認できませんでした。このソフトウェアを実行   しますか?    ↑このファイルは常に実行したい

    • ベストアンサー
    • HTML
  • exeファイルの起動について教えてください

    はじめまして。 現在c言語を勉強しているのですが、プログラム内で別のプログラムのexeファイルを呼び出し起動させたいのですが、サイトをいろいろ回ったのですが上手くいきませんでした。 環境は、Microsoft Visual C++ 2005 Express Edition 現在の呼び出し方法は、 case IDC_AI: /* 表示の次へボタン有効化 */ // SendMessage( hwnd, WM_SETREDRAW, TRUE, 0); /* 表示 */ // ShowWindow( IAhwnd, SW_SHOW); // CGMain(IAhwnd, message, wParam, IParam, nCmdShow2); // ShellExecute(hwnd, "open", "C:\\Documents and Settings\\c319-1037\\デスクトップ\\卒業研究\\プログラム\\11-12\\SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe", NULL, NULL, SW_SHOW); path=(char*)calloc(MAX_PATH+1,sizeof(char)); if(0!=GetModuleFileName( NULL, buf, MAX_PATH )){// 実行ファイルの完全パスを取得 char drive[MAX_PATH+1] ,dir [MAX_PATH+1] ,fname[MAX_PATH+1] ,ext [MAX_PATH+1]; _splitpath(buf,drive,dir,fname,ext);//パス名を構成要素に分解します // file = '"'; // file += "\\"; // file += '"'; file = drive; file += dir; file += "SQL組と合わせるよう\\Debug\\D3DFWSample2005.exe"; // file += '"'; // file += '"'; MessageBox( hwnd, file.c_str(), "完全パス", MB_OK); // MessageBox( hwnd, drive, "ドライブ", MB_OK); // MessageBox( hwnd, dir, "ディレクトリ パス", MB_OK); // MessageBox( hwnd, fname, "ベース ファイル名 (拡張子なし)", MB_OK); } ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); MessageBox( hwnd, "秀丸を起動します", "完全パス", MB_OK); // 秀丸を起動する if( !CreateProcess( NULL, // No module name (use command line). (LPSTR)file.c_str(), // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { MessageBox( hwnd, "CreateProcess failed.", "実行エラー", MB_OK); iRtn = -1; } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); MessageBox( hwnd, "秀丸を終了しました", "完全パス", MB_OK); return iRtn; です。 よろしくお願いします。