こんにちは。
初めて投稿させていただきます。VC++を始めて3ヶ月です。
どうしたらよいのかわからなくなってしまったので質問させてください!!
今、FTPサーバからファイルを読み込んできて、あるフォルダに保存し、その際に更新履
歴を残すファイルを作成するというプログラムを作成しています。
更新履歴ファイルは一度内容を読み込んでから追加するという手順を踏んでいます。
ですが、ちょっと変則的にソフトを多重起動させて使用することになり、更新履歴を作
成する部分で同時刻に別々のソフトから更新履歴ファイルにアクセスするという事態に
なってしまいました。
これがローカルフォルダであれば、CStdioFileを使用して、shareExclusiveを使えばフ
ァイルのアクセス制御ができますが、フォルダがFTPサーバの場合、ファイルが開いてい
る時に排他制御をすることはできるんでしょうか?もしなければ、やはり時間をずらす
ように調整しなければならないのでしょうか?
いくつか探してみたのですが、どう検索してよいかわからず、これといったものがわか
りませんでした。
もし宜しかったら皆様の知恵を拝借させてください!
開発環境 XP VC++ .NET MFC
> これがローカルフォルダであれば、CStdioFileを使用して、shareExclusiveを使えばフ
ァイルのアクセス制御ができますが、フォルダがFTPサーバの場合、ファイルが開いてい
る時に排他制御をすることはできるんでしょうか?
詳細までは調べていませんが、FTPの仕様にそのような機能はないようです。
#間違っていたら、識者の方々、フォローをお願いします。
> いくつか探してみたのですが、どう検索してよいかわからず、これといったものがわか
りませんでした。
とりあえず、FTPの仕様(RFC959)を調べてみて下さい。
たとえば、排他制御のフラグのかわりに、特定のファイル名のファイルをサーバに作成するとか
は・・・?
(結構めんどくさいし、それでいけるかどうかはわかりませんが。)
まぁそういう場合には ftp など使わずに rcs なり cvs なり subversion なり使うのが筋。
鯖がわにて排他制御するロジックを組んでおかないと重すぎます。
それに ftp だと全履歴データを読み込んで書き戻すことになります。
転送量のほとんどが無駄っつーことになりかねません。方針転換をお勧めします。
KING・王さん、tetrapodさん、レスありがとうございます。
やっぱりないんですね、、、
先程、FTPの仕様をかいつまんで読んでみました。
通常行うことではないことをやろうとしていることが良く分かりました。
以前に作成したプログラムをそのまま使ってできるかと思っていたのですが、
やはり方向を変えるしかないようですね。
補足しますと、
読み込んでくるサーバは複数からアクセスできるのですが、保存するサーバはこのソフ
トでしか上書きしません。(でも3~5つほど同じPC上でソフトを起動して使用しま
すが、、、)
しかも履歴ファイルはサーバ側が確認すれば消してしまうという類のファイルであった
ためにこのような手法を取りました。
とりあえず、プログラム内で一時ファイルを作成し、全てのデータが揃った時点でサー
バに保存するような形で考えてみます。
また何かありましたら、宜しくお願いします。
ありがとうございました。