从 SaveDialog 中获取 FileName 并动态更改它 c++

Get FileName out of SaveDialog and change it dynamically c++

这是我的问题: 我想用索引号扩展用户在 SaveFileDialog 中为程序提供的文件名。 我从对话框中获取完整路径并搜索“。”在里面。

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));

我尝试过的任何东西都可以按我想要的方式运行。

我想保存相机的不同图片,有了这个索引,用户可以更容易地找到他想要的图片。

提前致谢!

克努特

所以,您基本上需要将文件名拆分为其原始名称和扩展名,然后将这些部分与一些索引连接起来。您可以使用这个功能:

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;

这是我的解决方案:

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;}

对于此解决方案,您必须包括。

#include <msclr\marshal_cppstd.h>

如果您希望您的文件编号带有前导零,则必须使用 像这样的字符串流:

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