0

何百もの出力ファイルを生成しており、それらを作業ディレクトリ自体ではなく、作業ディレクトリ内の OUT というフォルダーに保存したいと考えています。各ファイルは、現在の反復に従って名前が付けられます。(out1.txt、out2.txt...など)。私はかなり長い間ドキュメントを見て、さまざまなことを試してきましたが、成功していません。これがコードです。(k が反復回数であるループ内にあります。

char outname[50];
char filepath[30];
char iter_str[10];
sprintf(iter_str,"%d",k)
strcpy(outname,"out");
strcat(outname,iter_str);
strcat(outname,".txt");
strcpy(filepath,"..\\OUT\\");
strcat(filepath,outname);
file = fopen(filepath,"w");

「OUT」フォルダーに移動する代わりに、作業ディレクトリに移動し、次のように名前を付けます。

..\OUT\out1.txt
..\OUT\out2.txt
..\OUT\out3.txt
etc

どんな提案でも大歓迎です!

UNIX では「\」の代わりに「/」を使用する必要があることに気付きました。私はこれを行い、セグフォルトを取得しました。また、"//" を使用するとセグ フォールトが発生します。

4

3 に答える 3

3

Boost Filesystem Libraryを使用する場合は、サブパスを結合するときに\またはを使用する必要があるかどうかを心配する必要はありません。/演算子/とを使用/=して、サブパスを組み合わせることができます。

using boost::filesystem::path;

path pathname("out");
pathname /= "abc"; //combine
pathname /= "xyz"; //combine
pathname /= "file.txt";   //combine

Windows の場合pathnameは になりout\abc\xyz\file.txtます。

Linux の場合は、 にpathnameなりout/abc/xyz/file.txtます。

于 2012-06-12T18:53:36.833 に答える
1

/エスケープされたバックスラッシュ ( ) の代わりに単一のスラッシュ ( ) を使用します\\。これは、すべてのオペレーティング システム (XP 以降の Windows を含む) で動作するはずです。

于 2012-06-12T18:57:05.680 に答える
0

strcpy() と sprintf(); の代わりに std::stringstream を使用できると思います。

std::stringstream l_strStream{};
#if defined(_WIN32)
    l_strStream << outName << "\\" << iter_str << ".txt";//for filename with path
#elif defined(__linux__)
    l_strStream << outName << "/" << iter_str << ".txt";//for filename with path
#endif // try this , no need to use other libs
于 2020-06-01T10:14:56.537 に答える