2012-11-14 15 views
5

ディレクトリと拡張子を保持しながら、Qt内の特定のファイルパスのベースファイル名の名前を変更する最も一般的な方法は何ですか?Qtでのベースファイル名の変更

標準的な方法がありますか、または正規表現を使用するだけですか?

のは、私が持っているとしましょう:

/home/user/myfile.png 

そして、それはのように変更します。

テストされていません
/home/user/myfile-modified.png 

答えて

6

使用QFileInfoを解析しますパスの側面。

QFileInfo original("/home/user/myfile.png"); 
QString newPath = original.canonicalPath() + QDir::separator() + original.baseName() + "-modified"; 
if (!original.completeSuffix().isEmpty()) 
    newPath += "." + original.completeSuffix(); 

警告:ファイル名が '。'で終わり、拡張子がない場合、 '。'が削除されます。つまり、/home/user/myfile./home/user/myfile-modifiedに名前が変更されます。さもなければ、これは機能するはずです。

+0

実際に私はファイル自体を移動したくありません。新しい名前を派生させたいだけです。たとえば、私のプログラムは元のファイルを読み込み、変更して元のファイル名に基づいて新しいファイルを保存しますが、 -modified 'が追加されました。ですから、 'QFile :: rename'はここでは必要ありません。 – sashoalm

+0

あなたは誤解しています。元の場所はQFileInfo :: canonicalPath()を使用して保存され、ファイルシステムが編集しようとしているファイルの場所を見つけるために必要です。とにかくQFile :: rename()はファイルを移動できません。 – Phlucious

+0

名前の変更が成功したかどうかを確認するコード行を追加します。変更されたファイル名がすでに存在する場合、QFile :: renameは失敗します。 – Phlucious

1

が、これはうまくいくかもしれない:

const char* filePath = "/home/user/myfile.png"; 
QFileInfo file(filePath); 
QDir dir = file.dir(); 
QString baseName = file.baseName(); 
QString baseNameModified = ...; // insert here your logic for modifying filename 
QFileInfo fileModified(dir, baseNameModified); 
QString filePathModified = fileModified.filePath(); 
関連する問題