現在コマンドライン引数を利用した、Drag&Dropで入力されたバイナリファイルをテキストファイルに出力するプログラムをCで作成しています。
その過程で、Drag&Dropされたファイル以外にもテキストファイル(option.txt)を読み込みたいのですが、どうしてもそのファイルをオープンすることができません。
次は問題の部分だけを抜き出したソースです。
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *s;
s=fopen("option.txt","r");
if( !s ){
printf("Error: cannot open file(option.txt)\n");
}
else printf("OK!\n");
if(argc == 2) printf("%s\n",argv[1]);
else if(argc ==1) printf("No Drag&Drop File\n");
return 0;
}
Drag&Dropしない時(作成された実行ファイルをダブルクリックで起動する時)は
OK!
No Drag&Drop File
となり、問題のoption.txtのファイルは開けているのですが、適当なバイナリファイル(7.chn)をDrag&Dropすると
Error: cannot open file(option.txt)
C:\Documents and Settings\[ユーザー名]\デスクトップ\Program\7.chn
と、先ほどまで開けていたoption.txtのテキストファイルが急に開けなくなってしまいました。
どうにも原因・解決策が分かりませんでしたので、お聞きしたくこちらに書き込みをさせてもらいました。
どなたか分かる方いらっしゃいましたらよろしくお願いします。
No.5
- 回答日時:
No1です。
他の人の回答で質問の意味が解りました。
ちなみにコンパイル、実行し、質問内容の確認をしました。
"option.txt"をフルパスにすれば解決します。
失礼しました!
この回答への補足
すみません、表現がわかりづらかったようですね。
ご指摘とおりフルパスで試してみたところ、こちらでもファイルが開けることが確認できました。
本当は相対パスのほうが便利でよかったのですが、他の方がおっしゃっていたように、Drag元のディレクトリでカレントディレクトリが変わってしまうようであれば、絶対パスの方がいいのかもしれません。
ありがとうございました。
No.4
- 回答日時:
試してないので自信ないのですが"option.txt"を絶対パス("c:\\option.txt"など)で書いてみるのはどうでしょうか。
(Drag&Dropで実行した場合、プログラムはDrag元で実行されたような気がします。)この回答への補足
絶対パスにするとちゃんと開くことができました。
しかし、Drag元とDrag先は実行ファイルやCのソースファイルがあるディレクトリにあり、そのディレクトリにoption.txtもありますので、カレントディレクトリにoption.txtもあるはずと思うのですが、この相対パスの指定方法で何が問題なのかが疑問には残るところではあります。
すみません、お礼を書くのを忘れてしまいました!
Dragもとのディレクトリでプログラムが実行されるとしたら、別のディレクトリからDragした場合を考えると、絶対パスのほうがいいのかもしれないですね。
どうも、ありがとうございました。
No.3
- 回答日時:
多分、「カレントディレクトリ」が違うせいかと思われます。
Drag&Drop時はカレントが、
C:\Documents and Settings\[ユーザー名]\デスクトップ\Program\
になっているので、単に"option.txt"とかくと、
C:\Documents and Settings\[ユーザー名]\デスクトップ\Program\option.txt
を開こうとします。で、これが見つからずにエラーになってます。
絶対パスにするなり、GetModuleFileName等の利用を検討してください。
この回答への補足
いえ、そのoption.txtがあるディレクトリがカレントディレクトリですので、見つかるはずではないかと思うのですが、なぜかエラーが出てしまうという状況です。
絶対パスにしますとちゃんと開けましたので、相対パスが無理なようでしたら絶対パスでいきたいと思います。
それと初めてみましたがGetModuleFileNameというものもあるのですね。
こちらも調べてみようと思います。
ありがとうございました。
No.1
- 回答日時:
今一質問の意味が解りません。
argcは引数に渡った文字列の個数ですので、Drag&Dropは関係ないですよ。 仮にコマンドで "実行ファイル名" "ファイル名"でもDrag&Dropした処理になりますよ。
まあそれはいいのですけど、気になるのはfcloseをしてないことですね。 fopenで開いた"option.txt"を閉じてません。
しかしながら、それで質問者が陥ってる状態にはならないと思いますが
・・・
開けなくなった状態でもoption.txtは存在しているんですか?
この回答への補足
指摘いただいたように、忘れていたファイルのクローズを試してみましたが、やはり状況は変わりませんでした。
option.txtはソースファイル・実行ファイルの存在するディレクトリにちゃんとあります。
パスの指定の方法は間違ってはいないと思うのですが…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
バッチファイル 二つ上のディ...
-
VBAでパワーシェルを実行したい...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
【VBA】ExcelマクロでCSVファイ...
-
SaveAsの保存先について
-
ExcelVBAの使い方 ¥の使い方...
-
コマンドプロンプトのコピー関...
-
初心者powershellのPS1ファイル...
-
【VB6】デバイスマネージャを表...
-
EXCEL(VBA)で指定フォルダ内の...
-
DOSのバッチファイルでカレント...
-
SHGetPathFromIDList によるパ...
-
【VB.NET】App.configにファイ...
-
【Excel VBA】Power Qurry のソ...
-
xcopyコマンドの進行状況を表示...
-
Dosバッチでファイルパスからフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報