• ベストアンサー

サービスアプリでのネットワークパスにあるファイルへのアクセス

VC++6.0でサービスアプリケーションを作成しています。 ログファイルに出力する処理を入れたのですが、ローカルドライブだと問題なく出力されますが、ネットワークパスだと出力できません。 また、サービスとしてではなくダブルクリックでアプリを起動すると問題なく出力されるのですが、サービスの設定やプログラムの記述で何か処理を行う必要があるのでしょうか? ちなみに、ファイルへの出力は、fopen(),fputs(),fclose()を使用しており、fopen()でエラーになっているようです。 よろしくお願いします。

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

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

デフォルトではサービスはサービスユーザとして動作するからです。 サービスのログオンをユーザのIDでログオンするようにすればいけるんじゃないかと思います。 ただ、サービスは常時動作しているわけで、ネットワークパスのように切れる可能性のあるところへファイルを出力するのはやめた方がよいとおもいますよ。

n_n
質問者

お礼

回答していただきましてありがとうございます。 ログオンの設定をローカルからアカウントに変更することで出力できました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ファイルへの書き込みについて

    test.phpというスクリプトを作成しています。 ファイルを指定して指定文字列"ABCD"を書き込むという処理です。 =========================== $MOJIRETU="ABCD" $fp=fopen("./TEST/TEST.html", "w"); fputs($fp,$MOJIRETU); fclose($fp); =========================== という処理です。 ですが、どうしてもファイルが作成されません。 実際に書き込むファイルは存在しませんが、 マニュアルを見るとfopenはファイルが未存在の 時は作成すると書いてありました。 権限(?)の問題かと思い、test.phpを'777'に変更しましたが 作成されませんでした。 どのような問題が推測されるでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルをドロップするとfopenからファイルが作成できません

    C言語でコンソールアプリケーションを作っています。 ファイルをexeにドロップして実行し、別のファイルに結果を出力させたいのですが、出力ファイルが作成されません。 どのようにすればよろしいのでしょうか。 コンソールから渡すときはファイルが作成されます。 コンパイラはBorland C++ Compiler 5.5を使用しています。 以下にコードの一部を掲載します。 int main(int argc, char *argv[]) {  char filename[256];  FILE *inputFile;  FILE *outputFile;  int i;  for(i=1; i<argc; i++)  {   if((inputFile=fopen(filename,"r")) == NULL)   {/*エラー処理*/}   sprintf(filename,"result%d.txt",i); // 出力ファイル名   if((outputFile=fopen(filename,"w")) == NULL)   {/*エラー処理*/}   for(;;)   {    char ss[1024];    if(fgets(ss,1024,inputFile) ==NULL) break;    fputs(ss,outputFile);   }   fclose(inputFile);   fclose(outputFile);  }  return 0; }

  • ブラウザ上でファイルの修正を行う

    こんばんは。お世話になっております。 タイトルにあるように、ブラウザ上でサーバー内にアップされているファイルを修正するため、アップされているファイルを呼び出し、テキストフォーム内に書き出されたファイル内容を修正して保存。という仕組みを作ったのですが、ローカル上では何ら問題なかったものの、レンタルサーバーへアップして、それを行ってみたところ、ファイル内に記述のあるダブルコーテーションの前に、円マークが保存実行を行う度に、倍々で増えていく現象が起きています。 こんな感じ。 $test="テスト";  →  $test=\"テスト\"  →  $test=\\"テスト\\" 修正を行い、ファイルの上書きをするソースは $addfname = "../index.html"; $editfile = $_POST["editfile"]; $addstr = file_get_contents($addfname); $fp=@fopen("$addfname","w"); fputs($fp,$editfile); fclose($fp); となっています。 以上、ローカル上では何ら問題なかったことなので、何処が不適切なのか分からずにおります。お忙しい中恐縮ですがアドバイスいただけたら幸いです。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • file()を使う時のファイルロック

    たいていの場合は問題ないのですが、 アクセスカウンタ等の更新の激しい物の場合、 file()やfile_get_contents()でファイルを開き、 その内容を元にfopen()・flock()・fputs()等を使って書き込むと、 データが破損してしまう事があります。 これはロック中でもfile()等では開けてしまうのが原因だと思いますが、 file()等を使う際の排他処理はどのようにしたら良いのでしょうか。 ロック中は、fopen()の前で解放されるのを待つ仕様なようなので、 $fp=fopen("ロック用ファイル","r"); flock($fp,LOCK_EX); ~複数のファイルの読み書きを含めた、様々な処理~ fclose($fp); としてみたのですが、これで排他処理は完璧になるでしょうか? これまでは、 1. ロック用ファイルが存在する場合、なくなるまでsleep() 2. 空のロック用ファイルを作成 ~複数のファイルの読み書きを含めた、様々な処理~ 3. ロック用ファイルを削除 としていたのですが、これでは度々破損してしまいました。 「1」と「2」の間で、新しいプロセスが「1」に割り込んで来てしまうせいでしょうか。 そうだとすれば、fopen()とflock()の間でも 同じ事が起きてしまう気がするのですが、どうなんでしょうか。

    • 締切済み
    • PHP
  • ファイルへの書込み処理が異常に遅い

    以下のファイルへの書込みを行なうプログラムの処理速度が極端に遅く困惑しています。 -------------------------------------------------------------------------------- /*  文字列"0,"をファイルに約2MB出力するプログラム  (2000文字で改行、1行毎にfopen&fclose) */ #include<stdio.h> void main( int argc, char *argv[] ) {   FILE *fp;   for( int i = 0; i < 1000; i++ )   {     if( !(fp = fopen( "C:\hogehoge.log", "a" ) ) )     {       exit( 1 );     }     for( int j = 0; j < 1000; i++ )     {       fprintf( fp "0," );     }     fprintf( "\n" );     fclose( fp );   }   exit( 0 ); } -------------------------------------------------------------------------------- 処理時間は5分程度です。 出力する文字列を"0#"に変えると5~6秒で終了します。 カンマが入ると違うのでしょうか? OSはWinXP、コンパイラはVC++7.0です。 原因と解決策をご存知の方、よろしくご教示下さい。

  • fopenでディレクトリ内の全ファイルを順次開く方法

     UNIX上の/home/info/user/log内にある*.logファイルを一つずつfopenで開いて一行ずつ読み込み、用が済んだらfcloseで閉じていくようなプログラムを作りたいのですが、どうすれば良いのでしょうか?  最初はls -l /home/info/user/log/*.logをリダイレクトしたファイルリストを作り、それを読み込ませてfopen……という流れを考えていたのですが、対象となるファイルが万単位に登る為実現不可でした。  一行ずつ読み込ませる部分は既に出来ているので、fopen/fcloseに絞ってお教え下さい。

  • 新しいファイルの書き込み ファイルができたり/出来なかったり 

    $fp3 = fopen("ent.txt,"w"); とオープンして fputsで書き込み fclose("ent.txt"); でクローズしています このプログラムをlocalhost/a.phpとかで実行すると 出力されるはずの、ent.txtファイルが exploreで見えないのです IEの更新ボタン(再実行?)を押すと ent.txtが見えます WindowXPにApacheとphpをインストールして 実行しています またこのルーチンを関数化して外部ファイルに置き 実行する時に、includeでもってくるように 変えましたが、ロジック上は問題ないと 思うんですが よろしくお願いします

    • ベストアンサー
    • PHP
  • windowsサーバでファイルに書き込みできない

    こんにちわ 先日サーバの移転でアイル(windows)に移項しました。 使用していたphpスクリプトでファイルに書き込む部分がなぜか動作せず、ログファイルの保存が出来なくなってしまいました。 $log ="log.csv"; $reg_com = $_POST['name'].",".$_POST['union']; $fp = fopen($log, "a"); flock($fp, LOCK_EX); fputs($fp, "$reg_com\n"); flock($fp, LOCK_UN); fclose($fp); Linuxサーバの再は上記で問題なくファイルに書き込みされていたのですが、なぜ動作しないのでしょうか? スクリプトの動作は、postされた内容をプログラムファイルと同じ階層のlog.csvに追記していくものになります。 問題点のご指摘をお願いします。

    • 締切済み
    • PHP
  • fcloseで発生するエラーについて。

    昨日「windowsプログラムのデバッグ」で投稿させて頂いた者です。 要点は「どのようなときにfcloseがエラーをおこすか」です。 Windowsプログラムでバグを探したところデバッグ用のログ出力ファイルを fcloseする時にエラーがおこりプログラムがエラーを起こして終了している ことがわかりました。 プログラムを実行させて一定操作を行うと、プログラムの最後に行われるfcloseでエラーが起こります。 プログラムを実行させてそのまま(×等で)終了させたときにはエラーが起こらずに正常な書き込みがされているので、 メッセージの処理等をしている間に変な処理を入れてしまているのだと思いますが、 実際にログファイルへの書き込みはfcloseの直前までできているのでなぜエラーが起こるのかよくわかりません。 if((fp=fopen("log.txt","w")==NULL)return -1; とやっているのでfopenは成功していると思います。 fcloseがエラーとなるのはどのような原因が考えられるのでしょうか。 「意味がわからないので~を説明しろ」等でも構いませんのでご回答お願いいたします。 【環境】 VC6.0++ProffessionalEdition windows2000 【その他】 -エラー文の内容- "0x77fcc465"の命令が"0xfffdfffa"のメモリを参照しました。 メモリが"read"になることはできませんでした。

  • ファイルの書き込みについて

    ファイルの書き込みに関する質問です。 下のコードでは、 3行目「$ptr=fopen("kekka.txt", "w"); //ファイルを開く」 に問題があるというエラーが出ます。 しかし、文法的には問題はないと思うのですが・・・。 サーバーには、"kekka.txt"というファイルが置いてあります。 何かアドバイスがありましたら、よろしくお願いいたします。 <?php $x = "こんにちは";  $ptr=fopen("kekka.txt", "w");   //ファイルを開く    flock($ptr, LOCK_EX);      //ファイルをロックする      fputs($ptr, $x);      //書込む    flock($ptr, LOCK_UN);       //ロックを解除する  fclose($ptr);            //ファイルを閉じる ?>

    • ベストアンサー
    • PHP