Ich benutze SHFILEOPSTRUCT für das Kopieren von Files aus einem bestimmten Ordner in einen Ordner, den der Programmbenutzer auswählt.
Diese Version funktioniert in meinem Programm einwandfrei:
Code: Alles auswählen
...
#define TEMPLATEPATH "F:\\Myt\\Template\\*\0"
...
void CConverter::SavePathAndCopyFiles()
{
QString directory = QFileDialog::getExistingDirectory(
this,
"Ausgabeordner wählen",
"/home",
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if ("" != directory)
{
m_Ausgabeverzeichnis = directory;
LPCWSTR szTargetName;
szTargetName = (LPCWSTR)directory.utf16();
TCHAR szSourceName[] = TEXT(TEMPLATEPATH);
SHFILEOPSTRUCT s = { 0 };
//s.hwnd = m_hWnd;
s.wFunc = FO_COPY;
s.pTo = szTargetName;
s.pFrom = szSourceName;
// Copy the template databases in the chosen folder
s.fFlags = FOF_SILENT;
SHFileOperation( &s );
}
}
Wenn ich aber versuche, den Pfad für den Ordner mit den Templates variabel zu gestalten, stosse ich auf ein Problem, das mir viel Nerven gekostet hat. Und zwar, kriegt der SHFILEOPSTRUCT kein vernünftiges s.pFrom Input, es findet kein Kopieren statt.
Dies ist die Variante:
Code: Alles auswählen
void CConverter::SavePathAndCopyFiles()
{
QString TemplatesLocation;
QString temp = QCoreApplication::applicationDirPath();
QFileInfo fi(temp+"/Template");
if (fi.exists())
{
TemplatesLocation= temp+"/Template/";
TemplatesLocation= QDir::convertSeparators(TemplatesLocation);
TemplatesLocation= TemplatesLocation+ "*\0";
//////////////////////////////////////////////////////////////////////////
QString directory = QFileDialog::getExistingDirectory(
this,
"Ausgabeordner wählen",
"/home",
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if ("" != directory)
{
m_Ausgabeverzeichnis = directory;
LPCWSTR szTargetName;
szTargetName = (LPCWSTR)directory.utf16();
LPCWSTR szSourceName;
szSourceName = (LPCWSTR)TemplatesLocation.utf16();
SHFILEOPSTRUCT s = { 0 };
//s.hwnd = m_hWnd;
s.wFunc = FO_COPY;
s.pTo = szTargetName;
s.pFrom = szSourceName;
// Copy the template databases in the chosen folder
s.fFlags = FOF_SILENT;
SHFileOperation( &s );
}
}
else
{
QMessageBox::critical(this, tr("Progy"), "Der Ordner TEMPLATES konnte nicht gefunden werden.",
QMessageBox::Ok, QMessageBox::NoButton);
emit close();
}
}
ich habe sehr viel Zeit investiert, den Fehler zu finden, aber ich schaffe es irgendwie nicht. HILFEEE.
Ich habe unter anderem auch dies hier versucht:
Code: Alles auswählen
..
//TemplatesLocation.append(QChar('*'));
//TemplatesLocation.append(QChar('\0'));
//TemplatesLocation.replace(QChar('\0'), "\\0");
..
MFG