ショッピングモール  


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.2944

Microsoft Visual C++ 6.0におけるファイル作成
投稿者---生活(2004/11/11 17:27:42)


はじめまして。宜しくお願いします。
さっそくですが、ファイル作成について質問させていただきます。
ファイルを作成する際には、fopenやcFileでライトモードやアットモードで
ファイルを開き、そのままcloseすればファイルを作成することはできますが、
ファイル内に何か書込みをするわけではなく、ただファイルだけを作りたい場
合、openしないで作成する方法等ありますか?
system関数で"mk ファイル名"とやる方法もあると思いますが、他にはどうでしょうか?
宜しくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:Microsoft Visual C++ 6.0におけるファイル作成 2977 るい 2004/11/17 12:30:50


No.2977

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---るい(2004/11/17 12:30:50)


方法はあると思いますが、、、

なぜ、open close ではだめなのですか?



この投稿にコメントする

削除パスワード

No.2979

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---生活(2004/11/17 23:33:39)


>方法はあると思いますが、、、
>
>なぜ、open close ではだめなのですか?

他のソフトで、自分が作ったファイルを検索していて、そのファイルを見つけると、
トリガーとして他の処理をし、すぐに削除してしまうためです。
こちらが、ファイルを作った瞬間にファイルを削除されてしまうと、
closeに影響を与えるかも知れないという心配があるためです。



この投稿にコメントする

削除パスワード

No.2980

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---KING・王(2004/11/17 23:54:25)


>こちらが、ファイルを作った瞬間にファイルを削除されてしまうと、
>closeに影響を与えるかも知れないという心配があるためです。

openして作成したファイルを、closeしていない状態の場合、
他のプログラムからそのファイルを削除できるのでしょうか?

普通できないような気がするが。。。(自信はありません。)




この投稿にコメントする

削除パスワード

No.2981

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---生活(2004/11/18 00:33:17)


>openして作成したファイルを、closeしていない状態の場合、
>他のプログラムからそのファイルを削除できるのでしょうか?

その通りでした。ファイルは削除できませんでした。
そのような意味では、ファイルを検索しているソフトに、
ファイル削除できないというエラーを出したくないため、
どうにか一発で作成できないかな?という意味になりますね。




この投稿にコメントする

削除パスワード

No.2982

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---RAPT(2004/11/18 00:51:27)


他の場所に作ったファイルをコピーするとか?


この投稿にコメントする

削除パスワード

No.2984

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---生活(2004/11/18 10:25:27)


>他の場所に作ったファイルをコピーするとか?

返信ありがとうございます。
今、確実にできる方法として、その方法があります。
ファイルをローカルに作成し、そのファイルを移動させる(実際には、
移動の関数がないので、system関数で"copy 元ファイル 作成ファイル"や、
APIの関数のCopyFileを使い、その後、削除コマンド(delやRemove)を使用する)方法です。
贅沢を言いますと、そのやり方だと、処理が結構多くなり、時間がかかる(PCの
世界の話ですが…)という欠点があるため、他のやり方を模索中です。



この投稿にコメントする

削除パスワード

No.2986

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---Ban(2004/11/18 11:04:37)


> そのような意味では、ファイルを検索しているソフトに、
> ファイル削除できないというエラーを出したくないため、
> どうにか一発で作成できないかな?という意味になりますね。

>今、確実にできる方法として、その方法があります。

試せてないのですが、これは確実なんでしょうか。

作成に失敗する可能性を消すために他で作って移動というのは
常套手段だと思いますが、open/close の間隔だけでエラーが
あがるような作りなら、MoveFileEx とかのタイミングでも
(頻度が下がるだけで)根本解決にはならないような気がしますけど...

これについては動作検証済みですか?頻度が落ちればいい要件ですか。

大きな(時間のかかる)ファイルを Copy などしてみてぶつかるようなら、
中身が空のファイルでもタイミングでぶつかると思います。



この投稿にコメントする

削除パスワード

No.2989

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---るい(2004/11/18 11:53:24)


コピーするとゆっても内部的には open close しているのでしょうからいっしょでしょう

rename は使えないのですか?



この投稿にコメントする

削除パスワード

No.2990

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---Ban(2004/11/18 12:13:08)


>rename は使えないのですか?

rename はファイルシステム的にアトミックなんですかね。
MSDN にはそこまで書いてませんが、OS や NTFS のバージョン、
FAT とかでも違ったりして....。

本来は同期が必要な処理を、片方に同期処理がないまま実行したいと
思っているのでしょうし、処理の間に外部から走査側を停止させるか、
処理側がアトミックを保証できないと結局ダメな気がします。

走査側も同期するようにするのが本来は正しいと思うのですが、
既存アプリであるとか、できない理由が何かあるのでしょう。



この投稿にコメントする

削除パスワード

No.2992

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---るい(2004/11/18 12:31:20)


はい、そのとおりだと思います

まぁ、、、コピーよりはましかとゆうことで<rename



この投稿にコメントする

削除パスワード

No.2994

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---生活(2004/11/18 19:14:48)


エラーをなくすためには、やはり排他制御を入れないとダメみたいですね。
頻度を減らすという意味では、他で作ってそれを、コピーや名前変更をすれば
いいかな。
結局は、エラー頻度を減らすためにopen,closeではなく、一発で作りたかった
のですが、そのやり方は「うまく見つからない」というか「ない」というか…



この投稿にコメントする

削除パスワード

No.2995

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---Ban(2004/11/18 20:51:13)


>エラーをなくすためには、やはり排他制御を入れないとダメみたいですね。

同一資源を操作する以上は普通そうです。

>頻度を減らすという意味では、他で作ってそれを、コピーや名前変更をすれば
>いいかな。
>結局は、エラー頻度を減らすためにopen,closeではなく、一発で作りたかった
>のですが、そのやり方は「うまく見つからない」というか「ない」というか…

要件が「エラー頻度を減らすために」なら目はあるかも知れませんが、
どれが一番早いかは環境依存、仮に計測しても実際に減る保証がありません。

また、オフィシャルに衝突ゼロを保証するものは見当たりませんので、
排他制御しない限りいずれは現象が発生しうる状態は変わりません。


この投稿にコメントする

削除パスワード

No.2991

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---Ban(2004/11/18 12:23:27)


>ファイル削除できないというエラーを出したくないため、

影響がこれだけで、OKを押せばすむ問題なら、特定エラーダイアログを
監視してそれが出現したらOKするプログラムを書いて走らせておくとか。
(既に本末転倒)

# 根本的にまともな方法では無理っぽい気がしてます。



この投稿にコメントする

削除パスワード

No.2993

Re:Microsoft Visual C++ 6.0におけるファイル作成
投稿者---Ban(2004/11/18 12:36:34)


># 根本的にまともな方法では無理っぽい気がしてます。

走査側もちゃんと排他制御するという"まともな方法"があるから、
"それができないなら無理っぽい"という方が適切でしょうか。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity