2016-09-26 5 views
1

ここに私の問題があります: ユーザーがインデックス番号を持つSaveFileDialogでプログラムに与えるFileNameを展開します。 ダイアログから完全なパスを取得して '。'を検索します。その中に。 SaveDialogからFileNameを取得して動的に変更します。C++

System::String^ str = saveFileDialog1->FileName; 
    pin_ptr<const wchar_t> wch = PtrToStringChars(str); 
    size_t convertedChars = 0; 
    size_t sizeInBytes = ((str->Length + 1) * 2); 
    errno_t err = 0; 
    char *FileName = (char*)malloc(sizeInBytes); 
    err = wcstombs_s(&convertedChars, 
     FileName, sizeInBytes, 
     wch, sizeInBytes); 
for (size_t i = 0; i < sizeof((*FileName)); i++) 
    { 

     if (FileName [i]=='.') 
     { 



     } 
} 

と、この時点で私はファイル名を編集するために異なるものを試してみました:私は試してみました

insert(i-1, ("_%i",i)); 

何も、私はそれを望んでどのように動作します。

カメラのさまざまな写真を保存したいと思います。このインデックスを使用すると、ユーザーは自分が望む写真を見つけやすくなります。

ありがとうございます!

クヌート

+0

私はあなたが実際に達成しようとしているものを理解していない:あなたは、ファイルの数は有鉛ゼロであることをしたい場合

#include <msclr\marshal_cppstd.h> 

は、そして、あなたはこのような にstringstreamを使用する必要があります。ユーザーの視点から完全なユースケースを記述できますか? – Firzen

+0

ユーザは、プログラムが何枚の写真を取るべきかを選択することができる。その後、プログラムは自動的にカメラの異なる設定で写真を撮ります。私は、ファイル名の設定の一部を探したい。そうすれば、絵を見つけやすくなります。ファイル名の末尾に数字をインクリメントする方法は、それがどのように機能するかを試すためだけです。 –

+0

ユーザーは私にパスc:\ user \ document \ filename.txtを与えます。私のやりたいことは、私のプログラムが新しいImageをfilename_1として保存し、新しいイメージごとに番号をインクリメントすることです。 –

答えて

0

だから、あなたは基本的にその生の名前と拡張子にファイル名を分割し、その後、いくつかの指標とこれらの部品に参加する必要があります。

string get_indexed_name(string filename, string index) 
{ 
    size_t lastindex = filename.find_last_of(".");  // get position of dot 
    string rawname = filename.substr(0, lastindex); // get string contents before dot 
    string extension = filename.substr(lastindex + 1); // get string contents after dot 

    return rawname + index + "." + extension;   // return indexed name 
} 

この方法では、定義済みの標準機能を使用します。あなた自身でそれをやりたいなら、関数find_last_ofsubstrを実装してみてください。次に、独自の実装を使用できます。

いくつかのコンパイルの問題がある場合は、これらの行を使用してソースコードを開始してください:

#include <iostream> 
using namespace std; 
+0

あなたがあなたの答えを投稿したときに私は自分自身でそれを得る:D。その解決策と私の自己によって解決策を見つけることができるあなたの質問のためにありがとう。 –

+0

あなた自身で解決できるとうれしいです。おめでとう! – Firzen

0

ここでは私のソリューションです:あなたは含める必要があり、この解決のために

System::String^ str = saveFileDialog1->FileName; 


    std::string sFilePath = msclr::interop::marshal_as<std::string>(str); 
    std::string fileExtension=msclr::interop::marshal_as<std::string>(str); 
    size_t pos= sFilePath.find('.', 1); 
    sFilePath = sFilePath.substr(0, pos); 
    fileExtension = fileExtension.substr(pos);        
    for(size_t i=0; i<100; i++){        
      std::string fileName; 
      fileName = sFilePath + std::to_string(i) + fileExtension;} 

 string fileName; 
     string fileNumber ; 
     stringstream ss; 
     ss <<'_'<< setfill('0') << setw(4) << std::to_string(i); 
     fileNumber = ss.str(); 
     fileName = f_sFilePath + fileNumber + f_sFileExtension; 
関連する問題