質問するログイン新規登録
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1269閲覧

C言語で実行ファイル直下にあるディレクトリに入っているファイル名を取得し、その取得したファイルの名前を変更したい。

naia

総合スコア20

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2023/07/01 07:29

0

0

実現したいこと

renameフォルダの中に入っているファイル名を取得し決まった形式のファイル名に変更したい。
ここに実現したいことを箇条書きで書いてください。

  • ▲▲できれば1から12までの数値を入力すると取り込んだファイル名が【佐藤】業務レポート_2023〇〇.docxのような名前に変換される。
    〇〇の部分は1から12まで入力した数値が入る。
  • ▲▲renameフォルダに入っているファイルは一つだけになります。

前提

手動でファイル名を変更して管理していましたが入力ミスで0が一つ多くついてる等のケアレスミスが目立ち、ミスが無いように修正してくれるプログラムを作成しようと思い至りました。

C言語で作成しています。コンパイルが通りましたが、ファイル名が変更されません。
renameフォルダ内のファイル名取得はできているようなのですがrename関数実行の所で躓いています。

ひとまず、ファイル名を取得し新規.txtにファイル名が変更されるところまで作り、その後改めて自分で入力部分を作成したいと思っています。
ここまでで試行錯誤して5時間かけましたが、ファイル名が変更されない原因が分からないのでご指摘願います。

発生している問題・エラーメッセージ

ファイル名が変更されない。

該当のソースコード

C

1#include <stdio.h> 2#include <dirent.h> 3 4int main(void) 5{ 6 // ファイル名を格納するchar変数を宣言する 7char filename[1024]; 8 9 DIR *dir; 10 struct dirent *dp; 11 char path[64] = "./rename/"; 12 13 dir=opendir(path); 14 15 for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){ 16 printf("%s\n",dp->d_name); 17 strcpy(filename, dp->d_name); 18 } 19 20 closedir(dir); 21 22// ファイル名を新規.txtに変更する 23printf("ファイル名を変換します。"); 24rename(filename, "新規.txt"); 25return 0; 26} 27 28```gcc version 7.3.0 (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project) 29```Windows11 PowerShell 30 31### 試したこと 32①文字化けを起こしていたのでコンパイル時にオプションで-fexec-charset=CP932と付けてコンパイルをしました。 33 34②実行ファイルと同じ場所にあるファイルしか変更できないのではないかと思い、rename関数の引数にpathを付けるやり方を検索してみましたが分からずじまいでした。 35 36### gcc 37 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/07/01 08:16

コードのマークダウン(```)はコードの前後で単独の行として挟まないと機能しません。 (始まりの方は直後から改行までの間に書いた文字列が言語名として用いられます。) 終わりのほうに ``` の直後に文字列があると終わりとして判定されません。 プレビューを参考にコードと説明がまともに表示されるようにしてください。
soda346

2023/07/01 08:32

デバッグするか、せめて変数の値を表示しろや 人に聞くまでもない内容 
guest

回答1

0

ベストアンサー

まずはちゃんとエラーハンドリングすべきでしょう。問題調査の 助けになることがあります。

c

1if (rename(filename, "新規.txt")) { 2 perror(filename); 3 return EXIT_FAILURE; 4}

おそらく原因は、filename にファイル名しか入ってないことです。変数 path と結合しないと相対パスになりません。"新規.txt" も同様です。"./rename/新規.txt" のようにならないといけません。

投稿2023/07/01 07:57

編集2023/07/01 07:59
int32_t

総合スコア21996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naia

2023/07/01 08:24

pathとファイル名を結合していない事が原因で 新規.txtの方も同様でした。 教えて下さりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問