ディレクトリと拡張子を保持しながら、Qt内の特定のファイルパスのベースファイル名の名前を変更する最も一般的な方法は何ですか?Qtでのベースファイル名の変更
標準的な方法がありますか、または正規表現を使用するだけですか?
のは、私が持っているとしましょう:
/home/user/myfile.png
そして、それはのように変更します。
テストされていません/home/user/myfile-modified.png
ディレクトリと拡張子を保持しながら、Qt内の特定のファイルパスのベースファイル名の名前を変更する最も一般的な方法は何ですか?Qtでのベースファイル名の変更
標準的な方法がありますか、または正規表現を使用するだけですか?
のは、私が持っているとしましょう:
/home/user/myfile.png
そして、それはのように変更します。
テストされていません/home/user/myfile-modified.png
使用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
に名前が変更されます。さもなければ、これは機能するはずです。
が、これはうまくいくかもしれない:
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();
実際に私はファイル自体を移動したくありません。新しい名前を派生させたいだけです。たとえば、私のプログラムは元のファイルを読み込み、変更して元のファイル名に基づいて新しいファイルを保存しますが、 -modified 'が追加されました。ですから、 'QFile :: rename'はここでは必要ありません。 – sashoalm
あなたは誤解しています。元の場所はQFileInfo :: canonicalPath()を使用して保存され、ファイルシステムが編集しようとしているファイルの場所を見つけるために必要です。とにかくQFile :: rename()はファイルを移動できません。 – Phlucious
名前の変更が成功したかどうかを確認するコード行を追加します。変更されたファイル名がすでに存在する場合、QFile :: renameは失敗します。 – Phlucious