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

时间:2016-09-26 11:12:39

标签: c++-cli

这是我的问题: 我想扩展用户在SaveFileDialog中为程序提供索引号的FileName。 我从对话框中获取完整的Path并搜索'。'在它。

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]=='.')
        {



        }
}

此时我尝试使用以下方法编辑FileName:

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

我没有尝试过,按照我的意愿行事。

我想保存相机的不同照片,使用此索引可以让用户更容易找到他想要的照片。

提前致谢!

的Knut

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;}

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

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