VC++ Version5.0使用です。
records.oldというファイルを元に清算して
records.newというファイルに書き込むというのは成功したんですが
そのrecords.newをrecords.oldという名前に変更して保存したいんですが
どんな風にすればよいのでしょうか?
検索してみたらrename()という関数があるみたいなんで
rename("records.new","records.old");
とやってみましたが、全然変わらないです。
ちなみに
http://www.ecs.shimane-u.ac.jp/~hamaguchi/class/ …
http://www9.plala.or.jp/sgwr-t/lib/rename.html
No.10ベストアンサー
- 回答日時:
あまり良くないコードですが書いてみました。
コレをコンパイルして実行できますか?
#include <stdio.h>
#include <direct.h>
#include <string.h>
int main(void)
{
char szCurDir[1024];
char szOldFile[1024];
char szNewFile[1024];
/* 初期化 */
memset(szCurDir, 0, 1024);
memset(szOldFile, 0, 1024);
memset(szNewFile, 0, 1024);
printf("ファイルがあるディレクトリを入力してください。");
gets(szCurDir);
if(_chdir(szCurDir) != 0)
{
printf("入力されたディレクトリが正しくありません。");
return -1;
}
printf("既存のファイル名を入力してください。");
gets(szOldFile);
printf("新しいファイル名を入力してください。");
gets(szNewFile);
if (remove(szNewFile) == 0)
{
printf("records.old has been removed successfully.\n");
}
else
{
perror("Remove Error\n");
}
if (rename(szOldFile, szNewFile) == 0)
{
printf("%s のファイル名を %s に変更しました。\n", szOldFile, szNewFile);
}
else
{
perror("Rename Error\n");
}
return 0;
}
ちなみに私の環境では正常に動作しました。
はい、出来ました!
removeもrenameも両方とも正常に動作します。
##################################################
ファイルがあるディレクトリを入力してください。C:\Program Files\DevStudio\MyProje
cts\Flight
既存のファイル名を入力してください。records.new
新しいファイル名を入力してください。records.old
records.old has been removed successfully.
records.new のファイル名を records.old に変更しました。
Press any key to continue
##################################################
VC++5のせいじゃなかったんですね。(^^ゞ
これで何度でも書いて消して書いて消して出来ます。ひゃっほー!
わざわざ実行可能な完全なコードまで書いてくださって
本当にありがとうございました!
No.9
- 回答日時:
direct.h をインクルードして
char szCurDir[] = "c:\\Program Files\\hoge";
_chdir(szCurDir);
をremoveよりも前に書いてください。
そして上の c:\\Program Files\\hoge をファイルのある
ディレクトリに書き直して実行してみてください。
_chdirは成功すると0が、失敗すると-1が返ります。
ありがとうございます。
char szCurDir[] = "c:\\Program Files\\DevStudio\\MyProjects\\Flight\n";
_chdir(szCurDir);
if (remove("records.old") == 0)
printf("records.old has been removed successfully.");
else
perror("remove error");
ということですよね?でも、やはり変化がないですね
(ディレクトリの後の\nを消しても同じでした):
変更するファイルを入力してください。records.new
新しいファイル名を入力してください。records.tmp
remove error: Permission denied
rename error: Permission denied
Press any key to continue
やはりVC++5なのがいけないんでしょうか…
No.7
- 回答日時:
removeもエラーチェックしましょう。
0以外だったら削除失敗です。
それと、renameはrecords.tmp(つまり、同じディレクトリ内に存在しないファイル名)にリネームしてみてください。
ありがとうございます。
removeもエラーチェックすべきでしたね。
チェックしたらremoveもrenameも失敗でした。あらら。
records.tmpへの変更もうまくいってないみたいです。
"records.new"は
C:\Program Files\DevStudio\MyProjects\Flight
の下に作られます。でも念のために.exeファイルのある
C:\Program Files\DevStudio\MyProjects\Flight\Debug
にも.newと.oldはコピーしておきましたが全然変わりませんね。
うーん、どうしましょう?
No.6
- 回答日時:
エラー内容を確認するにはperrorを使うと良いですよ。
http://www9.plala.or.jp/sgwr-t/lib/rename.html
の使用例でも使っていますね。
この関数でエラーの内容を表示してくれます。
ありがとうございます。
perrorなんて便利な関数があったんですね。
これは他のデバッグにも使えそうでいいですね。
で以下のようにしてみました:
fclose(ptold);
fclose(ptnew);
//char oldname[256], newname[256];
char oldname[256] = "C:\\Program Files\\DevStudio\\MyProjects\\Flight\\records.new\n";
char newname[256] = "C:\\Program Files\\DevStudio\\MyProjects\\Flight\\records.tmp\n";
printf("変更するファイルを入力してください。");
gets(oldname);
printf("新しいファイル名を入力してください。");
gets(newname);
if (remove("records.old") == 0)
printf("records.old has been removed successfully.");
else
perror("remove error");
if (rename(oldname, newname) == 0)
printf("%s のファイル名を %s に変更しました。\n", oldname, newname);
else
perror("rename error");
}
…何かお気付きの点などありますか?
No.5
- 回答日時:
#4です・・・ごめんなさい
VC6 SP6でWinNT系のOSだと
MoveFileEx()が普通に使用できてしまうんです。
それで、下のほうに書かれていたコードなのですが、
ファイル名をフルパスで指定するとどうなりますか?
また、ファイルがあるディレクトリをカレントディレクトリに
設定してからリネームするとどうなりますか?
ありがとうございます。
ええっ、VC++6だとそんなことが出来るんですか!ホスィ…
ていうか今時VC++5使っている人間の方が珍しいですよね。(^^ゞ
フルパスでもやってみました。結果は以下のようです:
char oldname[256] = "records.new\n";
char newname[256] = "records.tmp\n"; //と定義して
remove error: Permission denied
rename error: Invalid argument
Press any key to continue
変更するファイルを入力してください。records.new
新しいファイル名を入力してください。records.old //←old
remove error: Permission denied
rename error: Permission denied
Press any key to continue
変更するファイルを入力してください。records.new
新しいファイル名を入力してください。records.tmp //←tmp
remove error: Permission denied
rename error: Permission denied
Press any key to continue
変更するファイルを入力してください。C:\Program Files\DevStudio\MyProjects\Flight
\records.new
新しいファイル名を入力してください。C:\Program Files\DevStudio\MyProjects\Flight
\records.tmp
remove error: Permission denied
rename error: Permission denied
Press any key to continue
Permissionって…いるんですかね?
一応OSはWindows XP SP2です。
No.1
- 回答日時:
もしかしたら、records.old を事前に削除すればいいかも知れません。
remove("records.old");
rename("records.new","records.old");
あとは、プログラム実行ディレクトリの関係で、"records.new" という名前だけではファイルが見えない可能性があります。ただし、読みこみ/書き込みの処理はできているようなので、こちらの可能性は少ないでしょう。
ありがとうございます。
remove("records.old");はもう試してたんですよ。
でも変わりませんでした。
ファイルの読み書きの部分ではディレクトリ名は付けていませんので
こちらもいらないと思います。
#2さんのエラーチェックを試してみたら-1が返ってきました。
でもどこがおかしいのかはちょっと分かりませんね。
一応、コードを載せておきます。
fclose(ptold);
fclose(ptnew);
/*
MoveFileEx(
"records.new",
"records.old",
MOVEFILE_REPLACE_EXISTING
);
*/
int check;
char oldname[20] = "records.new\n";
char newname[20] = "records.old\n";
remove("records.old");
check = rename("records.new","records.old");
printf("Check: %d\n", check); // -1が返ってきます…
//rename(oldname, newname);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 和訳してください Kade Ruotolo, your NEW 77kg Champion, You 1 2022/09/19 14:26
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- 英語 この文章で文法的に間違えている箇所があれば教えてください。 [Being teenager, the 1 2023/02/26 13:41
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- 英語 高校英語の問題 1 2023/05/23 15:29
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- 英語 hositng の意味を教えてください 3 2023/08/18 07:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フルパスから最後のディレクト...
-
どんなプログラムを書いても指...
-
windows.hがincludeされない
-
ExcelVBAでカレントディレクト...
-
セルに入力されたパスでフォル...
-
FindFirstFileについて
-
マイクラでPythonのプログラミ...
-
パス名を表示させたい
-
ThisWorkbook.Pathについて
-
EXCELでダイアログボックスを開...
-
webアプリケーションでの画像フ...
-
delphi5でのディレクトリ内ファ...
-
VBAのSHELLを用いてEXEファ...
-
GetPrivateProfileStringでini...
-
C言語を用いたファイルの一括削...
-
AfxLoadLibrary関数で、DLLのハ...
-
ファイルやディレクトリの存在...
-
FTPでputすると空ファイルが出...
-
VBでのファイル検索について。
-
Ubuntu テキストファイルをどこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どんなプログラムを書いても指...
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
ExcelVBAでカレントディレクト...
-
「UNCパスはサポートされません...
-
マイクラでPythonのプログラミ...
-
C言語を用いたファイルの一括削...
-
fopenで別ディレクトリにファイ...
-
GetPrivateProfileStringでini...
-
ファイルやディレクトリの存在...
-
ネットワーク上のコンピュータ...
-
ExcelVBA サーバーの(共有フォ...
-
エクセルVBAで相対パスでファイ...
-
pythonでの日本語操作
-
VBAで自身のファイル名を取得す...
-
webアプリケーションでの画像フ...
-
絶対パスの絶対て英語で何でし...
-
FTPでリモートのファイル一覧取得
-
ファイルダイアログのカレント...
おすすめ情報