- ベストアンサー
名前を変えて保存
windows XPでC++を利用しています。 24時間の活動を記録をするため、センサを利用しています。 今使っているセンサはSTARTを押してSTOPを押すと full01.xls とデスクトップ上に記録されます。 しかし、20分たつと自動的にSTOPしてしまい、再度STARTを クリックしないと記録ができないようになっています。 (このことはマクロの自動クリックで解決できました。) そこで質問ですが、このときfull01.xls の名前を変えなければ 上書き保存されてしまい、以前に記録したデータが消えてしまいます。 なので、デスクトップ上にfull01.xls が来た場合に自動で名前を 変換できるようして、変換した後にfull01を削除したいのですが (20分おきに記録されていくので連番にできるようにしたい。 full02,full03・・・・・・full100) C++はまったくの初心者ですので どなたかよろしくお願いします。
- みんなの回答 (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; }
その他の回答 (1)
- yaemon_2006
- ベストアンサー率22% (50/220)
お礼
ありがとうございます。 参考にしてみます
お礼
ありがとうございます! さっそく実行してみます!!