Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cli 将文件名从SaveDialog中取出并动态更改为c++;_C++ Cli - Fatal编程技术网

C++ cli 将文件名从SaveDialog中取出并动态更改为c++;

C++ cli 将文件名从SaveDialog中取出并动态更改为c++;,c++-cli,C++ Cli,我的问题是: 我想用索引号展开用户在SaveFileDialog中给程序的文件名。 我从对话框中获取完整路径,并在其中搜索“.” System::String^ str = saveFileDialog1->FileName; pin_ptr<const wchar_t> wch = PtrToStringChars(str); size_t convertedChars = 0; size_t sizeInBytes = ((str->Leng

我的问题是: 我想用索引号展开用户在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]=='.')
        {



        }
}
我试过的东西都不能满足我的要求

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

提前谢谢


Knut

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

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_of
substr
。然后您可以使用自己的实现

如果存在编译问题,请确保使用以下行开始源代码:

#include <iostream>
using namespace std;
#包括
使用名称空间std;

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

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_of
substr
。然后您可以使用自己的实现

如果存在编译问题,请确保使用以下行开始源代码:

#include <iostream>
using namespace std;
#包括
使用名称空间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;}
System::String^str=saveFileDialog1->FileName;
std::string sFilePath=msclr::interop::marshal_as(str);
std::string fileExtension=msclr::interop::marshal_as(str);
size_t pos=sFilePath.find('.',1);
sFilePath=sFilePath.substr(0,位置);
fileExtension=fileExtension.substr(pos);
对于(size_t i=0;i,以下是我的解决方案:

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;}
System::String^str=saveFileDialog1->FileName;
std::string sFilePath=msclr::interop::marshal_as(str);
std::string fileExtension=msclr::interop::marshal_as(str);
size_t pos=sFilePath.find('.',1);
sFilePath=sFilePath.substr(0,位置);
fileExtension=fileExtension.substr(pos);

对于(size_t i=0;我不明白您实际上想要实现什么。您能从用户的角度描述完整的用例吗?用户可以选择程序应该拍摄多少张照片。然后程序会自动使用相机的不同设置拍摄照片。我想在文件名中找到设置的一部分。然后更容易找到图片。增加文件名末尾的数字只是为了尝试它的工作方式。用户给了我例如路径c:\user\document\filename.txt。我想做的是,我的程序将一个新图像保存为filename\u 1,并为每个新图像增加数字。就像这里所做的那样:但我想编辑用户给定的文件名。忘记上面注释中的.txt,它应该是.jpg或图像文件格式。为什么要搜索“.”(点)在给定路径中?是否要切断文件扩展名?如果获得路径C:\test\photo.tiff,输出是否为例如C:\test\photo_XYZ.jpg?我不明白您实际上想实现什么。您能从用户的角度描述完整的用例吗?用户可以选择程序应该拍摄多少张图片。然后Gram自动使用相机的不同设置拍摄照片。我想在文件名中找到设置的一部分。这样更容易找到照片。在文件名末尾增加数字只是为了尝试它的工作方式。用户给了我例如路径c:\user\document\Filename.txt。我想要什么我的程序是否将一个新图像保存为文件名_1,并为每个新图像增加数字。就像这里所做的那样:但我想编辑用户给定的文件名。并且忘记上面注释中的.txt它应该是一个.jpg或一个图像文件格式。你为什么要搜索“.”(点)在给定路径中?是否要切断文件扩展名?如果您获得路径C:\test\photo.tiff,输出是否为例如C:\test\photo_XYZ.jpg?当您发布您的答案时是否准确?我自己获得答案:D。感谢您的解决方案以及您的问题,让我自己找到解决方案。我很高兴您能够自己解决它。CoD.谢谢你的解答,谢谢你的问题让我自己找到了答案。我很高兴你能自己解决这个问题。祝贺你!