Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Август 05, 2012, 09:14



Название: У меня нет QDesktopServices [Решено]
Отправлено: CJ1 от Август 05, 2012, 09:14
Где взять QDesktopServices???


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 05, 2012, 09:21
Ой блин, да она переименовалась оказывается извиняюсь!


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 05, 2012, 09:38
Теперь такая проблема, делаю так
Код
C++ (Qt)
    QString s = QDesktopServices::storageLocation(QDesktopServices::TempLocation).replace("/","\\");
 
 
 
   if (f.copy(":/new/prefix1/1111.xlsx",s+"111.xlsx"))
       QMessageBox::about(0,"","File copy: OK");
   else{
       QMessageBox::about(0,"File copy: ",f.errorString()+ ": "+s+"111.xlsx");
 
   }
 

И дает ошибку "Неизвестная ошибка"

И путь высвечивается как C:\Users\B45D~1\AppData\Local
А должен быть как  C:\Users\Теймур\AppData\Local


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 05, 2012, 09:58
Разобрался!
Теперь пытаюсь удалить его, говорит отказанно в доступе!


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 05, 2012, 10:11
Кто может помочь решить такой вопрос, куда в Windows 7 можно скидывать временно файлы, потом использовать их а потом удалить?


Название: Re: У меня нет QDesktopServices
Отправлено: Kurles от Август 05, 2012, 10:41
Кто может помочь решить такой вопрос, куда в Windows 7 можно скидывать временно файлы, потом использовать их а потом удалить?
QString QDir::tempPath () [static]


Название: Re: У меня нет QDesktopServices
Отправлено: LisandreL от Август 05, 2012, 11:34
Кто может помочь решить такой вопрос, куда в Windows 7 можно скидывать временно файлы, потом использовать их а потом удалить?
QTemporaryFile


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 07:58
и ЕЩЕ МНЕ НУЖНО ЧТОБ ОРИГИНАЛЬНЫЕ ИМЕНА ФАЙЛОВ СОХРАНИЛИСЬ!


Название: Re: У меня нет QDesktopServices
Отправлено: Serr500 от Август 06, 2012, 07:59
Что имеется в виду под оригинальными именами? Поясните вопрос.


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 08:05
Задача такова.
Есть 1000 файлов в ресурсах.
Я их должен куданибудь скинуть, потом запустить другой exe когда он закончит работать с ними, все это удалить!


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 08:09
Все ниче! После закидывания в папку темп файлов, на удаления нет доступа!


Название: Re: У меня нет QDesktopServices
Отправлено: Serr500 от Август 06, 2012, 08:13
Получаем временный каталог методом QDir::tempPath(). Создаём там папку с произвольным именем и скидываем туда файлы. Когда они станут не нужны, папке удаляем.

Как это нет доступа? Не может такого быть! Если файл создан каким-то процессом, то этот процесс должен иметь права и на удаление. Может, флажок ReadOnly прицепился? ОС какая? Не Linux?


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 10:21
Windows 7


Название: Re: У меня нет QDesktopServices
Отправлено: Serr500 от Август 06, 2012, 10:28
Тогда права должны быть. Может быть, порождённый процесс ещё не завершился и держит файлы?


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 10:38
Вот код
Код
C++ (Qt)
   QFile f;
   QString s = QDir::tempPath().replace("/","\\") +"\\";
 
   QDir dir(s);
   if(dir.exists()){
       QMessageBox::about(0,"Есть директория",s);
   } else{
       QMessageBox::about(0,"","Нет директория");
   }
 
   f.setFileName(":/new/prefix1/1111.xlsx");
   if(f.exists()){
       QMessageBox::about(0,"","Есть файл");
   } else{
       QMessageBox::about(0,"","Нет файл");
   }
 
 
   if (f.copy(s+"1121.xlsx"))
       QMessageBox::about(0,"","File copy: OK");
   else{
       QMessageBox::about(0,"File copy: ",f.errorString()+ ": "+s+"1121.xlsx");
 
   }
 
   f.close();
   f.setFileName(s+"1121.xlsx");
   if (f.remove() )
       QMessageBox::about(0,"","File delete: OK");
   else{
       QMessageBox::about(0,"File delete: ",f.errorString()+s+"1121.xlsx");
 
   }


При удалении, пишет, нет доступа!


Название: Re: У меня нет QDesktopServices
Отправлено: kambala от Август 06, 2012, 10:53
попробуй так:
Код
C++ (Qt)
QDir dir = QDir::temp();
QString s = dir.absolutePath() + '/';


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 11:06
Так же! Отказ в доступе!

Вот даже по подробней код
Код
C++ (Qt)
   QFile f;
   QString s;
   QDir dir2 = QDir::temp();
   //Берем путь к temp папки
   s = dir2.absolutePath() + '/';
   QDir dir(s);
   if (!dir.exists(s+"code"))
       if(dir.mkdir(s+"code")){
           QMessageBox::information(0,"Папка создалась!",s);
       } else{
           QMessageBox::critical(0,"Папка не создалась!",s);
           return;
       }
 
   s += "code/";
 
   // Устанавливаю имя файла в ресурсах
   f.setFileName(":/new/prefix1/1111.xlsx");
   if(!f.exists()){
       QMessageBox::critical(0,"Ошибка","Файл :/new/prefix1/1111.xlsx отсутствует");
       return;
   }
 
 
   if (!QFile::exists(s+"1121.xlsx"))
       if (f.copy(s+"1121.xlsx"))
           QMessageBox::about(0,"","File copy: OK");
       else{
           QMessageBox::critical(0,"File copy: ",f.errorString()+ ": "+s+"1121.xlsx");
           return;
       }
 
   f.close();
   f.setFileName(s+"1121.xlsx");
   if (f.remove() )
       QMessageBox::about(0,"","File delete: OK");
   else{
       QMessageBox::critical(0,"File delete: ",f.errorString()+s+"1121.xlsx");
 
   }


Название: Re: У меня нет QDesktopServices
Отправлено: Serr500 от Август 06, 2012, 11:10
Да. Флажок readOnly ставит. Видимо, из-за того, что ресурсы, вкомпилированные в бинарник, менять невозможно. Нужно убирать этот флажок. Например, так:
Код:
f.setPermissions(f.permissions() | QFile::WriteOwner | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther);

P.S. Вместо
Код:
QString s = QDir::tempPath().replace("/","\\") +"\\";
было бы более правильно использовать
Код:
QString s = QDir::toNativeSeparators(QDir::tempPath()) + QDir::separator();


Название: Re: У меня нет QDesktopServices
Отправлено: CJ1 от Август 06, 2012, 11:13
Точняк!!!!
Чтож я сразу та не попробовал! (((((
Я не думал что он ставит Read onle