今、名前がすべてランダムで付けられたcsvファイル数十個を
すべて共通の書式の名前に変更するプログラムを作成中なのですが、
最初の段階で躓いてしまいました。
どこの部分かというと、
rename("DATA\\str", "yyyymmdd.csv");
この部分です。
以下私の書いてみたソースです。
int main(void)
{
int result;
char str[20];
FILE *li_fp;
li_fp = fopen("filelist.txt", "r");
memset(liststr, '\0', 20);
fgets(liststr, 20, li_fp);
result = rename("DATA\\str", "yyyymmdd.csv");
if (result != 0)
{
printf("名前の変更に失敗しました。\n");
perror("rename error");
}
fclose(li_fp);
}
カレントディレクトリ内に、
filelist.txtとDATAというフォルダがあります。
filelist.txtには、DATAの中にあるcsvデータの名前が列挙されています。
DATAフォルダの中には、filelist.txtで列挙されたものの
実際のデータが入ってます。
filelist.txtの中身はこんなかんじです。
aabbcc.csv
ddeeff.csv
gghhii.csv
・
・
・
実際はもっとぐちゃぐちゃしたファイル名ですが、わかりやすいように
簡略化して書かせていただきます。
fgetsで一行目の
aabbcc.csvをstrに取り込み、rename関数を使い、DATAフォルダの中の
aabbcc.csvをyyyymmdd.csvに変更したいのですが、
実行結果は
名前の変更に失敗しました。
rename error: NO such file or directory
と表示されてしまいます。
絶対パスでの指定方法も試してみましたが、同じ結果でした。
この部分がわからないと先を作っても意味がないので困っております。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
char path[256];
fgets(str, 20, li_fp);
if (str[strlen(str)-1] == '\n') str[strlen(str)-1] = '\0';
sprintf(path, "DATA\\%s", str);
rename(path, "yyyymmdd.csv");
もちろんyyyymmddになんらかの日付を入れたいのなら別に処理が必要です
rename("DATA\\str", "yyyymmdd.csv");
の"DATA\\str"の書きかたで引っかかっていたのが解消されました。
sprintfで全部詰め込んでから書けばよかったんですね。
sprintfは用途が分からずあまり使ったことがなかったのですが、
これからはよく使うことになりそうなので、もう一度よく調べてみます。
yyyymmddに日付を入れる処理はもうできているので、
これでようやく
○月から×月までのデータを足す。
などの処理ができるようになりました。
ありがとうございました!!!
No.2
- 回答日時:
このソースを見る限りだとエラーになるのは当然です。
1.
> fgets(liststr, 20, li_fp);
ここでファイルから読み込んだliststrを使用していない。
2.
> result = rename("DATA\\str", "yyyymmdd.csv");
これだとDATAフォルダ内の"str"ってファイルを"yyyymmdd.csv"に変更します。
DATAフォルダ内に"str"ってファイルが無い限りはリネームできません。
すいません。ソースをコピーする際、余計な部分を削り、長い変数名を
片っぱしから変えていったときかえ忘れたようです。
実際はstrで統一しております。
申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
だれがとけるの?
-
バッチファイルで以下のような...
-
C#,vb.netで業務用アプリ開発と...
-
ArduinoのジャイロモジュールMP...
-
gccを行ってもexeファイルが生...
-
これなにがちがうんですか??
-
応用情報技術者試験の令和元年...
-
へんな現象
-
c言語
-
C# でソフト開発をした事のある...
-
プログラミング 2つの整数を読...
-
C言語階乗の総和を求める
-
Windows formアプリで データグ...
-
インクリメント演算子のみを用...
-
Stuck
-
質問失礼します。 プログラム言...
-
プログラミング c言語
-
win10で、正確な待ち時間の作り方
-
右ビットシフト
-
Linux Cプログラミングを学ぶた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
ダブルコーテーション付きでCSV...
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
VBAで複数のCSVからレコードセ...
-
ファイル名を変数で書きこむfwr...
-
CSVで余計な空行が入る
-
CSVデータの文字列置換
-
EXCEL→CSV保存時のダブルクォー...
-
VB.netでShellExecuteがしたい
-
エクセルの任意のシートをcs...
-
fortranでデータの抜き出しをし...
-
VBA csvファイルのデータを...
-
pythonでリストをCSVに出力する...
-
FileListBoxで出すものを絞り込...
-
バッチファイルでcsvファイルに...
-
複数のファイルをまたぐエクセ...
-
StringGridの中身をCSV形式で保...
-
rubyを用いたCSVファイルの分割...
-
vbaマクロについて 次のような...
おすすめ情報