解決策
LabVIEWでファイル名を変更する方法は、いくつかあります。
方法 1
移動関数を使用する方法です。この関数は、あるファイルパスの場所から別の場所にファイルを移動するための関数ですが、同じ場所に対して別のファイル名となるパスを指定することでファイル名が変更されます。
- ブロックダイアグラムを右クリックして、関数パレット>>プログラミング>>ファイルI/O>>上級ファイル関数>>移動を選択して配置します。
- ソースパス入力に名前を変更する既存ファイルの絶対パス(WindowsではC:\Folder1\Folder2\...\Filename.txtなど)に配線します。
- ファイルI/Oパレットにあるパスをストリップ関数およびパス作成関数を使用して、既存のファイル名を目的の新しいファイル名に置き換えます。新しく形成された絶対パスを移動関数のターゲットパス入力に配線します。 これは下の画像で見ることができます。
方法 2
コピー関数を使用して既存ファイルのコピーを新しい名前で作成し、削除関数を使用して古いファイルを削除します。コピー関数および削除関数は、関数パレット>>プログラミング>>ファイルI/O>>上級ファイル関数サブパレットにあります。
メモ1: ファイルの場所を移動し、名前を変更する場合は、ターゲットパス入力に配線するパスを変更する必要があります。
メモ2: メモリにロードされたVI名を変更すると、ディスク上のファイル名が変更されますが、メモリ内のVIは引き続き古い名前を保持しています。そのため、VIを閉じる際、古い名前で保存するように求められます。その名前を新しい名前に変更しない限り、2つのコピーが存在することになります。
メモ3: 既存ファイルまたは新しいファイルのパスとしてC:\の直下を使用している場合、アクセス拒否エラーが発生します。このエラーは、管理者権限なしでCドライブとの間でファイルを直接コピーする権限がないために発生します。代わりに別のフォルダパスを使用します。
方法 3
非常に大きなファイルまたはフォルダ名を変更する場合は、方法3をお勧めします。この場合、上記の方法に比べると非効率的で、完了するまでに時間がかかります。下図のようにライブラリ関数呼び出しノードを使用して、Windows APIのMoveFileA関数を呼び出します。
この方法を使用するには、次の手順でライブラリ関数呼び出しノードを設定します。
- 関数パレット>>接続>>ライブラリ&実行可能ファイル>>ライブラリ関数呼び出しノードを選択して、ダイアグラムに配置します。
- ライブラリ関数呼び出しノードをダブルクリックして、関数タブにあるライブラリ名またはパスフィールドでkernel32.dllと入力します。
- 関数名ドロップダウンメニューでMoveFileAを選択します。
- 呼び出し規約でstdcall(WINAPI)ラジオボタンを選択します。
- パラメータタブで以下のパラメータを設定します。
- 名前: 戻り値タイプ、タイプ: 数値、 データタイプ: 符号付き32ビット整数
- 名前: arg1、タイプ: 文字列、定数、文字列形式: C文字列ポインタ、 最小サイズ: <None>
- 名前: arg2、タイプ: 文字列、定数、文字列形式: C文字列ポインタ、 最小サイズ: <None>
- 上記を設定すると関数タブの関数プロトタイプには、int32_t MoveFileA(const CStr arg1, const CStr arg2); として表示されます。
方法 4
ファイル名の変更は、コマンドラインでも行うことができます。次の例は、コマンドラインを実行してファイル名を変更する方法を示しています。
- コードの最初のセグメントはcmd / k cd <ファイルを含むフォルダパス>です。 これにより、システム実行VIでフォルダに移動するように指示されます。/kオプションを使用すると、同じテキスト文字列に複数のコマンドラインを入力できます。
- 2番目のセグメントは、 & rename <既存ファイル名> <新しいファイル名>です。&は、実行する2番目のコマンドがあることを示します。名前を変更すると、<既存ファイル名>で指定されたフォルダが<新しいファイル名>に変更されます。
方法 5 (一括処理)
上記の方法のいずれかを使用して、フォルダ内のすべてのファイル名を変更することができます。以下のコードは、特定のフォルダ内にあるすべてのファイル名を方法1で一括処理する方法を示しています。
再帰ファイルリストVIおよびファイル拡張子を取得VIを使用して、C:\tempフォルダ内にあるすべてのファイルを方法1で名前変更します。