Results 1 to 4 of 4

Thread: Rename File

  1. #1
    Join Date
    Mar 2011
    Posts
    5
    Qt products
    Qt4 Qt/Embedded
    Platforms
    Unix/X11

    Default Rename File

    This is simple program, but is not doing the expected...
    (Part of the code)
    Qt Code:
    1. QString ms, fileName;
    2. QDir dr;
    3. int dbg;
    4. QFileInfoList filesList;
    5. QString ds, qs;
    6. uint nf;
    7. int numFiles = filesList.count();
    8. QUuid uRand = QUuid::createUuid ();
    9. QUuid uRand2 = QUuid::createUuid ();
    10.  
    11. for (int ii = 0; ii < numFiles; ii++) {
    12. fileName = filesList.at(ii).fileName();
    13. if (dr.rename(fileName, qs.sprintf("%07u", uRand.data1++)))
    14. out << "Success-I, ii: " << ii << ", fileName: " << fileName << ", uRand.data1: " << uRand.data1 << endl;
    15. else out << "Fail-I" << endl;
    16. }
    17. for (int ii = 0; ii < numFiles; ii++) {
    18. fileName = filesList.at(ii).fileName();
    19. if (dr.rename(fileName, qs.sprintf("%07u", uRand2.data1++)))
    20. out << "Success-II, ii: " << ii << ", fileName: " << fileName << ", uRand.data1: " << uRand2.data1 << endl;
    21. else out << "Fail-II" << endl;
    22. }
    To copy to clipboard, switch view to plain text mode 


    Output always is:
    Success-I, ii: 0, fileName: 915190944, uRand.data1: 815395111
    Success-I, ii: 1, fileName: 915190945, uRand.data1: 815395112
    Success-I, ii: 2, fileName: 915190946, uRand.data1: 815395113
    Success-I, ii: 3, fileName: 915190947, uRand.data1: 815395114
    Success-I, ii: 4, fileName: 915190948, uRand.data1: 815395115
    Success-I, ii: 5, fileName: 915190949, uRand.data1: 815395116
    Success-I, ii: 6, fileName: 915190950, uRand.data1: 815395117
    Success-I, ii: 7, fileName: 915190951, uRand.data1: 815395118
    Success-I, ii: 8, fileName: 915190952, uRand.data1: 815395119
    Success-I, ii: 9, fileName: 915190953, uRand.data1: 815395120
    Success-I, ii: 10, fileName: 915190954, uRand.data1: 815395121
    Success-I, ii: 11, fileName: 915190955, uRand.data1: 815395122
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II
    Fail-II

    Why is it not able to rename file second time?

    Pls see for yourself, and suggest ways to make it work.

    Thanks.

  2. #2
    Join Date
    Sep 2011
    Posts
    1,241
    Thanks
    3
    Thanked 127 Times in 126 Posts
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Rename File

    because you just renamed them all!

    Not that I understand how there is anything in QFileInfoList variable since it is only default initialised.

  3. #3
    Join Date
    Mar 2011
    Posts
    5
    Qt products
    Qt4 Qt/Embedded
    Platforms
    Unix/X11

    Default Re: Rename File

    There is a way around. Use QDir::setPath() and QFileInfoList::entryInfoList(), first for some folder & then for the required folder. And voila.

    Qt Code:
    1. int rnmDirFiles (QString ms, QDir dr, int dbg, QFileInfoList filesList, QString ds, uint nf) {
    2. int numFiles;
    3. QUuid uRand = QUuid::createUuid ();
    4. QUuid uRand2 = QUuid::createUuid ();
    5. QString fileName = "";
    6. numFiles = filesList.count();
    7.  
    8. QString absPath = dr.absolutePath(); // store current path
    9. for (int ii = 0; ii < numFiles; ii++) {
    10. fileName = filesList.at(ii).fileName();
    11. if (dr.rename(fileName, qs.sprintf("%07u", uRand.data1++)))
    12. out << "Success-I, ii: " << ii << ", fileName: " << fileName << ", uRand.data1: " << uRand.data1 << endl;
    13. else out << "Fail-I" << endl;
    14. }
    15.  
    16. //change path temporarily, else renaming in succession not possible
    17. dr.setPath("/tmp");
    18. filesList = dr.entryInfoList(QDir::Files, QDir::Name);
    19.  
    20. // this second QDir::setPath and QFileInfoList::entryInfoList is reqd., otherwise second time rename fails
    21. dr.setPath(absPath);
    22. filesList = dr.entryInfoList(QDir::Files, QDir::Name);
    23.  
    24. for (int ii = 0; ii < numFiles; ii++) {
    25. fileName = filesList.at(ii).fileName();
    26. if (dr.rename(fileName, qs.sprintf("%07u", uRand2.data1++)))
    27. out << "Success-II, ii: " << ii << ", fileName: " << fileName << ", uRand.data1: " << uRand2.data1 << endl;
    28. else out << "Fail-II" << endl;
    29. }
    30. return 1;
    31. }
    To copy to clipboard, switch view to plain text mode 

    file renaming is successful both times now.

    Output always is:
    Success-I, ii: 0, fileName: 915190944, uRand.data1: 815395111
    Success-I, ii: 1, fileName: 915190945, uRand.data1: 815395112
    Success-I, ii: 2, fileName: 915190946, uRand.data1: 815395113
    Success-I, ii: 3, fileName: 915190947, uRand.data1: 815395114
    Success-I, ii: 4, fileName: 915190948, uRand.data1: 815395115
    Success-I, ii: 5, fileName: 915190949, uRand.data1: 815395116
    Success-I, ii: 6, fileName: 915190950, uRand.data1: 815395117
    Success-I, ii: 7, fileName: 915190951, uRand.data1: 815395118
    Success-I, ii: 8, fileName: 915190952, uRand.data1: 815395119
    Success-I, ii: 9, fileName: 915190953, uRand.data1: 815395120
    Success-I, ii: 10, fileName: 915190954, uRand.data1: 815395121
    Success-I, ii: 11, fileName: 915190955, uRand.data1: 815395122

    Success-II, ii: 0, fileName: 915190944, uRand.data1: 815395111
    Success-II, ii: 1, fileName: 915190945, uRand.data1: 815395112
    Success-II, ii: 2, fileName: 915190946, uRand.data1: 815395113
    Success-II, ii: 3, fileName: 915190947, uRand.data1: 815395114
    Success-II, ii: 4, fileName: 915190948, uRand.data1: 815395115
    Success-II, ii: 5, fileName: 915190949, uRand.data1: 815395116
    Success-II, ii: 6, fileName: 915190950, uRand.data1: 815395117
    Success-II, ii: 7, fileName: 915190951, uRand.data1: 815395118
    Success-II, ii: 8, fileName: 915190952, uRand.data1: 815395119
    Success-II, ii: 9, fileName: 915190953, uRand.data1: 815395120
    Success-II, ii: 10, fileName: 915190954, uRand.data1: 815395121
    Success-II, ii: 11, fileName: 915190955, uRand.data1: 815395122

  4. #4
    Join Date
    Apr 2010
    Posts
    769
    Thanks
    1
    Thanked 94 Times in 86 Posts
    Qt products
    Qt3 Qt4
    Platforms
    Unix/X11

    Default Re: Rename File

    I don't know how you can be certain of that, since you're using the same names both times. Rather than trust the rename() function to return a value you expect, I'd give them different names on each pass to ensure that the operation is really doing what you want, at least as a test.

Similar Threads

  1. Rename a Tab of a QTabWidget
    By Qiieha in forum Qt Programming
    Replies: 8
    Last Post: 27th August 2021, 19:26
  2. Qt Creator Is it possible to rename a project?
    By N3wb in forum Qt Tools
    Replies: 1
    Last Post: 3rd December 2010, 02:14
  3. rename file name
    By weixj2003ld in forum Qt Programming
    Replies: 11
    Last Post: 8th April 2010, 11:27
  4. File rename detection
    By bunjee in forum Qt Programming
    Replies: 6
    Last Post: 23rd July 2009, 16:22
  5. How to rename a file after opening ?
    By npc in forum Newbie
    Replies: 2
    Last Post: 1st June 2006, 14:36

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.