2011-06-20 31 views
0

私のプログラムは1年以上正しく実行されています。今日私はファイルを別のシステムにコピーし、すべてのプログラムをコンパイルしました。ファイルに書き込めません

Dev-C++からコンパイルして実行すると、それは想定されているようなテキストファイルにデータを書き込みますが、作成した実行ファイルをクリックすると、ファイルにデータが書き込まれません。入出力のようなものはすべて動作するようです。

私が逃した手順は?

私は完全なプログラムを与えましたが、まだ書きません。

C++環境でコンパイルしたときに実行されなかった場合、私は非常に困惑しています。自分のコードをチェックし続けることができますが、.exeだけが動作しません。

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() { 
ofstream bss2; 
bss2.open("expat.txt",ios::app); 
bss2 << 2 ; 
bss2.close(); 
} 

これはテストしたサンプルコードです。

どのように私は現在の作業ディレクトリを見つけるのですか?

[OK]を私は

bss2.open("c:\\expat2.txt",ios::app); 

にラインを変え、今では、exeファイルで正しく動作します。

しかし、50以上のファイルがあります。私はそれぞれの新しいパスを覚えておく必要はありませんでした。以前に使用したディレクトリにディレクトリを設定するにはどのような回避策がありますか?

更新4:

#define _POSIX_SOURCE 
#include <unistd.h> 
#undef _POSIX_SOURCE 
#include <stdio.h> 

main() { 
    char cwd[256]; 
    int y; 
    if (chdir("/tmp") != 0) 
    perror("chdir() error()"); 
    else { 
    if (getcwd(cwd, sizeof(cwd)) == NULL) 
     perror("getcwd() error"); 
    else 
     printf("current working directory is: %s\n", cwd); 
    } 
    scanf(y); 
} 

[OK]を私は(GETCWDを使用)、これは、それは私に

のchdir()エラー()を与えるメッセージである:そのようなファイルやディレクトリ

方法を今すぐディレクトリを設定しますか?

+1

ユーザー権限でopen("を置き換えることができますか?どのOSを実行していますか? – Joe

+0

魔法の部分?申し訳ありませんあなたのユーザー名に抵抗する...;) – Nim

+1

すべてのエラーメッセージ? –

答えて

0

最も簡単で簡単な方法は、ファイル名ではなく出力ファイルのフルパスを指定することです。そうすれば、ファイルがどこに保存されたかを確認し、どこでも検索する必要がなくなります。 Windowsを使用している場合、出力ファイルはsystem32のどこかにある可能性があります。しかし私は間違っている可能性があります。

+0

あなたは絶対に正しいです。システム32とすべての.txtファイルがチェックされているだけです。今私はそれをどのように変更するのですか? – Asterix

+0

ファイル名ではなく、出力ファイルのフルパスを指定します。 –

+0

50個のC++ファイルに20個以上のテキストファイルがありますが、それを変更する必要はありません。他に何ができますか? – Asterix

1

私はまだレイモンド・チェンの精神的デバッグ能力は持っていませんが、私はあなたに役立つツールを知っています:Process Monitor。これを使用して、アプリケーションが書き込もうとしているファイルと、それが失敗する理由を正確に確認してください。

+0

精神的なデバッグ能力? – YXD

+2

@Mr E:http://www.google.com/search?hl=en&q=raymond+chen+psychic+debugging –

2

ファイルをダブルクリックすると、作業ディレクトリのようなサウンドが正しく設定されていません。ログにアクセスできる場合は、getcwd()を使用し、それが返すログを記録します。

+0

私はgetcwd()を使用しました。このファイルや作業ディレクトリはありません。どのように私はそれを適切にするのですか。 – Asterix

+0

いいえ、chdir( "/ tmp")を使用して、/ tmpが存在しないことを伝えました。 Windowsシステムで実行している場合、c:\ tmpが実際に存在すると仮定して、chdir( "c:\\ tmp")が必要です。 – damian

1

多分あなたは間違った場所を見ています。プログラムは、現在の作業ディレクトリにファイルを書き込みます。これは、実行可能ファイルをダブルクリックしてDev-C++から実行するときに異なる場合があります。

+0

現在の作業ディレクトリはどのようにして見つけられますか? – Asterix

+0

ダーニアンの回答 – Dikei

0

他の人が言っているように、作業ディレクトリは間違っている可能性があります。

.exeへのショートカットを作成する場合は、ショートカットプロパティで作業ディレクトリを設定できます。ショートカットを右クリックして[プロパティ]を選択し、[開始]プロパティを変更します。

もちろん、ファイルを開くときに、ファイルのフルパスをファイル名文字列に入力する方がよいでしょう。

+0

を確認してください。プロパティの開始が間違いなく正しく設定されています。 – Asterix

+0

@Asterixの場合、ディレクトリに書き込むための適切な権限がないと判断する必要があります。 Windows 7では、ファイルを作成できる場所に多くの制限が追加されています。 –

0

Windowsではバックスラッシュが使用されている可能性があるので、 "/ tmp"ではなく "\ tmp"を試してください。すべてのファイルが同じディレクトリにある場合

また、あなたは置き換える&を見つける使用してopen("c:\\your_directory_here\

関連する問題