2016-11-24 4 views
0

C++とC++プログラムの場所を使用してコンピュータ上にファイルを作成する方法はありますか?私はこのプログラムを複数のコンピュータで使用できるようにしたいが、各コンピュータにはそれぞれ異なるディレクトリがあります。たとえば、ユーザーディレクトリにあるtest.txtファイルを作成する場合は、プログラムファイルの場所に対応するファイルのパスを指定する方法があります。ユーザーの名前によって「ユーザー」が異なるためです。プログラムの場所に対応するファイルを作成する方法は?

+0

'GetModuleFileName'関数を使用します。 –

+1

...シナリオによっては、ユーザーのDocumentsフォルダ(またはアプリケーションデータフォルダ)の場所を調べるほうがよいでしょう。[Known Folders](https://msdn.microsoft.com/en)を参照してください。 -us/library/windows/desktop/bb776911(v = vs.85).aspx)をMSDNにインストールします。 –

答えて

-1

限り、あなたは窓の上にあるとして、あなたがGetUserNameが、その後のCreateFileかのfstreamを使用してそこにファイルを作成し、その後の作業ディレクトリを変更するにはSetCurrentDirectory APIを使用するAPIを使用することができます

#include <iostream> 
#include <windows.h> 
#include <fstream> 
#include <string> 
using namespace std; 


int main() 
{ 

    ULONG len = 50; 
    LPSTR lpBuffer = (LPSTR)GlobalAlloc(GPTR, len); 
    GetUserName(lpBuffer, &len); 
    cout << lpBuffer << endl; 
    // don't forget to clean when you're done: 

    string str = "C:\\Users\\"; 
    str += lpBuffer; 
    str += "\\test.txt"; 
    cout << str << endl; 

    ofstream out(str.c_str()); 
    if(out.fail()) 
     perror("Opening failed"); 
    out << "Hello " << lpBuffer; 

    out.close(); 

    GlobalFree(lpBuffer); 


    GlobalFree(lpBuffer); 

    return 0; 
} 

このプログラムは現在のユーザ名を取得し、作成をそのフォルダ内にファイルを作成し、それに "Hello"というユーザ名を書き込みます。

+1

ユーザーのプロファイルが常にC:\ Users \ であるという保証はなく、実際にはそうではないケースが多数あります。また、プロファイルはファイルを置く場所が間違っています。 –

+0

この回答には複数の問題があります: '1'バッファに' GlobalAlloc'を使用すると、スタック割り当てが可能になります。 '2'ユーザ名にある特定のUnicode文字でコードが失敗することを絶対に確かめます。 '3'存在していてもいなくてもよいパスを構築します。 '4'' std :: basic_ios :: fail() 'を間違った方法で使用します。 '5' 'lpBuffer'に' GlobalFree'を2回呼び出します。 – IInspectable

関連する問題