从 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_of
和 substr
。然后你可以使用你自己的实现。
如果存在一些编译问题,请务必使用以下行开始您的源代码:
#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;
这是我的问题: 我想用索引号扩展用户在 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_of
和 substr
。然后你可以使用你自己的实现。
如果存在一些编译问题,请务必使用以下行开始您的源代码:
#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;