C++ cli 将文件名从SaveDialog中取出并动态更改为c++;
我的问题是: 我想用索引号展开用户在SaveFileDialog中给程序的文件名。 我从对话框中获取完整路径,并在其中搜索“.”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
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.谢谢你的解答,谢谢你的问题让我自己找到了答案。我很高兴你能自己解决这个问题。祝贺你!