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