C++ cli 仅打开某些文件扩展名并检查该文件的前两部分是否为整数
我正在编写的程序将以给定格式打开一个.DAT文件: 如何阻止用户打开.DAT以外的任何其他文件扩展名?例如,如果他们试图打开一个.PNG文件,它会抛出下面的MessageBox,指出它不是一个正确的迷宫文件 我还希望在文件的前两部分打开后都不是整数时发生这种情况C++ cli 仅打开某些文件扩展名并检查该文件的前两部分是否为整数,c++-cli,file-extension,C++ Cli,File Extension,我正在编写的程序将以给定格式打开一个.DAT文件: 如何阻止用户打开.DAT以外的任何其他文件扩展名?例如,如果他们试图打开一个.PNG文件,它会抛出下面的MessageBox,指出它不是一个正确的迷宫文件 我还希望在文件的前两部分打开后都不是整数时发生这种情况 OpenFileDialog ^ fileDialog = gcnew OpenFileDialog(); fileDialog->InitialDirectory = "."; if (fileDialog->ShowDi
OpenFileDialog ^ fileDialog = gcnew OpenFileDialog();
fileDialog->InitialDirectory = ".";
if (fileDialog->ShowDialog() == ::DialogResult::OK)
{
wchar_t fileName[1024];
for (int i = 0; i < fileDialog->FileName->Length; i++)
fileName[i] = fileDialog->FileName[i];
fileName[fileDialog->FileName->Length] = '\0';
ifstream ifs;
ifs.open(fileName);
maze = new Maze( mazePanel, ifs );
ifs.close();
if (maze->IsValid())
{
showOriginalBtn->Show();
mazePanel->Show();
}
else
{
MessageBox::Show( "Not a proper maze file!" );
mazePanel->Hide();
}
}
下面是我在迷宫文件中读取并将其存储到正确位置的代码:
valid = true;
free = false;
ifs >> width >> height;
if ( width <= MAXSIZE && height <= MAXSIZE)
{
panel = drawingPanel;
panel->Width = width * CELLSIZE;
panel->Height = height * CELLSIZE;
}
else
valid = false;
char value;
for (int i = 0; i < height; i++)
for (int j = 0; j < width; j++)
{
ifs >> value;
if (value != EXIT && value != DEADEND && value != OPEN)
{
valid = false;
return;
}
orig[j][i] = value;
solved[j][i] = value;
}
您可以使用OpenFileDialog的Filter属性设置显示的扩展名。比如:
fileDialog->Filter = ".dat";
查找上次出现的“.”,下一个文本将是扩展名;将其与DAT进行比较
我不太明白你需要什么,所以我假设你的意思是你需要检查前两部分。在本例中,如果std::cin>>int1&&std::cin>>int2{/*…*/},则可以执行此操作。>>如果输入的格式与int1和int2的类型不匹配,将返回false
-编辑
回应您的评论,下面是您如何迭代wchar_t[]
wchar_t t[] = { 'a', 'b', '.', 'D', 'A', 'T' };
std::wstring s;
for (int i = 5; t[i] != '.'; i--) {
s = t[i] + s;
}
std::wcout << s << std::endl; //DAT
如果他们输入的是实际的名字呢?我需要打开程序以弹出消息框。使用System.IO中的Path.GetExtension方法检查DAT.1。使用wchar\u t数组让我感到困惑。我理解这个过程使用的是一个常规字符串,你能详细说明一下吗?2.这就是我的意思。非常感谢。很抱歉,我没有清楚地把这个问题讲清楚。事实上,我的第二个案例似乎也涵盖了我的第一个案例,因为输入PNG文件仍然会失败!对于第一个问题,我必须坐下来研究如何在使用wchar\u t时转换该方法。不过,我确实理解你所说的。据我所知,wchar\u t只是一种宽字符类型,宽含义是字符通常不只有1字节大。除了chars十六进制表示之外,遍历wchar_t数组应该与遍历chars数组相同。你应该从最后开始,向后移动,直到你找到一个新的目标。这是有意义的,而且肯定是我会在一个次要项目中研究的东西。再次感谢。不过,我们通常只说std::wstring t=Lab.DAT;。但是这个代码有更多的风格问题;例如不使用.findL.'和其他字符串方法。
wchar_t t[] = { 'a', 'b', '.', 'D', 'A', 'T' };
std::wstring s;
for (int i = 5; t[i] != '.'; i--) {
s = t[i] + s;
}
std::wcout << s << std::endl; //DAT