• ベストアンサー

名前を変えて保存

windows XPでC++を利用しています。 24時間の活動を記録をするため、センサを利用しています。 今使っているセンサはSTARTを押してSTOPを押すと full01.xls とデスクトップ上に記録されます。 しかし、20分たつと自動的にSTOPしてしまい、再度STARTを クリックしないと記録ができないようになっています。 (このことはマクロの自動クリックで解決できました。) そこで質問ですが、このときfull01.xls の名前を変えなければ 上書き保存されてしまい、以前に記録したデータが消えてしまいます。 なので、デスクトップ上にfull01.xls が来た場合に自動で名前を 変換できるようして、変換した後にfull01を削除したいのですが (20分おきに記録されていくので連番にできるようにしたい。  full02,full03・・・・・・full100) C++はまったくの初心者ですので どなたかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

C言語でWIN32APIを使ってみました。 同じフォルダに full01.xls があるか1秒毎に探します #include <stdio.h> #include <windows.h> #define FILENAME "full01.xls" /* このファイルを監視する */ #define FINDNAME "full" /* これで始まるファイルにリネームする */ int main(void) { WIN32_FIND_DATA fd; HANDLE handle; int n,max; char fname[256]; while (1) { /* 無限ループ */ handle = FindFirstFile(FILENAME, &fd); if (handle == INVALID_HANDLE_VALUE) { /* 見つからない */ Sleep(1000); continue; } max=0; /* 最大値を探す */ handle = FindFirstFile(FINDNAME"*.xls", &fd); if (handle != INVALID_HANDLE_VALUE) { /* 最初のファイルが見つかった */ do { n=atoi(&(fd.cFileName[strlen(FINDNAME)])); if (n>max) max=n; } while (FindNextFile(handle, &fd)); FindClose(handle); } max++; /* 1増やす */ /* 書き込むファイル名を作ってリネーム */ sprintf(fname,FINDNAME"%02d.xls",max); printf("%sを%sにリネーム:%s\n",FILENAME,fname,(MoveFile(FILENAME, fname))?"成功":"失敗"); } return 0; }

s0570063
質問者

お礼

ありがとうございます! さっそく実行してみます!!

その他の回答 (1)

回答No.1
s0570063
質問者

お礼

ありがとうございます。 参考にしてみます

関連するQ&A