我有一个文本文件,我在其中写入磁盘分区中所有文件的路径。
WriteToFile::WriteToFile(QString path, QString data)
{
path = "E:/Data.txt";
QFile file(path);
if ( file.open(QFile::Append) )
{
data += "\r\n";
QTextStream stream( &file );
stream << data << endl;
qDebug() << "Writting: " << data;
}
}
我只在文件中写入新路径。
void ScanDir::qDirIteratorScanner()
{
// QString basePath;
QDirIterator it(this -> basePath, QDir::Files, QDirIterator::Subdirectories);
while (it.hasNext())
{
// QStringList paths;
paths = scanned();
QString path = it.next();
qDebug() << "Collected : " << paths.size();
if (!paths.contains(path)) {
WriteToFile writeToFile(basePath, path);
paths << path;
}
else {
qDebug() << "Already put : " << path;
}
}
}
我预计有时我会开始扫描分区,但在完成扫描分区之前停止程序。我想通过附加&#34; LAST-SCAN-POINT&#34;来标记我上次停止的位置。到最后一个路径入口的开始(如果是新路径),或者最后if (!paths.contains(path))
(如果我在检查路径时是否终止了该程序已被插入文件)
如何检查文本文件中以 LAST-SCAN-POINT
开头的行DATA.TXT
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7010.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 / Plug-Ins / Layout /(对齐面板资源)/idrc_PNGA/7011.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7012.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7013.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7014.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7015.idrc
LAST-SCAN-POINT C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7016.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7017.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7018.idrc
C:/ Program Files / Adobe / Adobe InDesign CC 2015 /插件/布局/(对齐面板资源)/idrc_PNGA/7019.idrc
答案 0 :(得分:1)
如何使用QString::startsWith
method?例如:
QString path = "LAST-SCAN-POINT C:/Program Files/Adobe/Adobe InDesign CC 2015/Plug-Ins/Layout/(Alignment Panel Resources)/idrc_PNGA/7016.idrc";
if(path.startsWith("LAST-SCAN-POINT ")) {
qDebug() << "The path starts with 'LAST-SCAN-POINT '";
} else {
qDebug() << "The path does not start with 'LAST-SCAN-POINT '!";
}
答案 1 :(得分:1)
只需在txt文件中搜索“LAST-SCAN-POINT”,就可以这样做:
int readFile(std::string path)
{
std::ifstream filestream(path);
std::string line;
char lsp[16];
int i = 0;
while (std::getline(filestream, line))
{
std::stringstream linestream;
linestream << line;
linestream.get(lsp, 16);
if (std::string(lsp) == "LAST-SCAN-POINT")
{
filestream.close();
return i;
}
i++;
}
filestream.close();
return -1;
}
这将返回LAST-SCAN-POINT开启的行,如果不存在,则返回-1。
答案 2 :(得分:0)
只需使用QFile的 readLine 功能(此处为文档jqyoui-droppable plugin)一次读取一行,然后使用 startsWith函数 的QString,如Moe Abdul-Hameed所示