DeletdFileがしくる条件は?

[戻る]
豊年 2009/10/21(水) 14:48:27
戻り値が0になっているのに、
肝心のファイルが消えていません。
また、まわしうちとして、fopenのw+bを使おうと思っていますが(1パイトくらい書きこんで、とにかく、HDD全体で容量が小さくなれば可)、これを使う場合、fputcやfcloseをやる前なら、fgetcしたなら、前に入っている値は確実に読み込めるものなのでしょうか?

仲澤@失業者 2009/10/21(水) 14:58:18
0が戻ると「失敗である」と、手元のマニュアルには書いてありますが。
何が疑問なのでしょうか。

みい 2009/10/21(水) 15:22:27
「fopenのw+b」
ヘルプに「読み出しと書き込みの両方のモードで空のファイルを開きます。指定された
ファイルが既にあると、そのファイルの内容が破壊されます。」って記述されています
よ。

PATIO 2009/10/22(木) 13:20:07
とにかく、適当に改行を入れてください。
ここまで長くしてしまうと読み辛いので。

DeleteFileの関数仕様に関しては既に仲澤@失業者さんが書かれている通りなので
MSDNを参照してください。関数の仕様に関しては思い込みは禁物なので疑問に思ったら
その都度、MSDNで確認するのが基本ですよ。

スレッドの題名と書いてある内容が微妙にずれているのも気になります。
題名では失敗する時の条件を聞きたい様に書かれているのに
実際の文章では違う事を質問してますよね。
これだとこのスレッドを読む側からすると肩透かしを食らうと思うので
なるべくあわせるように努力した方が良いと思いますよ。

あと、「しくる」、「まわしうち」は分かりにくいと思うので
一般的な表現を使うようにした方が良いと思います。
(失敗するとか、代替案とした方が一般的には分かりやすいと思います)
掲示板の書き込みは読む側がわかりやすいように書く事が大事です。

豊年 2009/10/24(土) 18:56:21
各種、お返事ありがとうございます。


今の状況です。

int  Del_Result;
int  Why_Del_Result;


Del_Result = DeleteFile("BYYY.bmp");

if (Del_Result == 0) 
  Del_Result = GetLastError();


この結果、
DeleteFileの結果は0(消すのが失敗)
となり、その原因をGetLastErrorで問ってみたら、
2(ファイルが存在せず)
が帰って来ています。

実際には、
明らかにBYYY.bmp
(大文字か小文字かも確かめた)
は存在しているのに、
理由がわかりません。

ちなみに、
そのBYYY.bmp
をディレクトリではなく、
その下のdebugのサブディレクトリや
C:直下に入れてみても、
結果は同じでした。

頭を抱えています。
何が悪いのでしょうか?

ITO 2009/10/24(土) 19:26:49
>C:直下に入れてみても、
「c:\」にコピーして、
  Del_Result = DeleteFile("c:\\BYYY.bmp");
をしてもだめですか?

FlatWest 2009/10/24(土) 21:40:50
::PathFileExists()
::GetCurrentDirectory()
::SetCurrentDirectory()

とりあえずこのあたりのAPIを使ってチェックしてみればよろし。

豊年 2009/10/25(日) 13:25:43
みなさん
ありがとうございます。

「c:\」にコピーして、
Del_Result = DeleteFile("c:\\BYYY.bmp");
としても、
やはり消せませんでした。
“ファイルは無し”
でした。

次は、
同じく、
このファイルを
Driving_AVI
と言う
C:直下のディレクトリにコピーを取って、

#include <shlwapi.h>"

if (PathFileExists(fname))
   printf("The said File exists !");
else
{
   printf("The said File never exists !");
      exit(2);
}

GetCurrentDirectory(MAX_PATH, buf);
SetCurrentDirectory("C:\\Driving_AVI");

とやってみましたが、
今度は、コンパイルは通ったものの、
リンク時、
下記のエラーが出ました。    
        

リンクしています...
main.obj : error LNK2001: 
外部シンボル "__imp__PathFileExistsW@4" は未解決です。
K:\AVI_to_BMP_H211018\Debug\VS2005 AVI File Operation.exe : 
fatal error LNK1120: 外部参照 1 が未解決です。
ビルドログは 
"file://k:\AVI_to_BMP_H211018\Debug\BuildLog.htm" に保存されました。
VS2005 AVI File Operation - エラー 2、警告 0

PathFileExistsの遣い方、
どこが悪いのでしょうか?

FlatWest 2009/10/25(日) 15:10:33
#pragma comment (lib, "shlwapi.lib") 

仲澤@失業者 2009/10/26(月) 10:08:14
毎度おなじみの「MBCSとUnicode」については大丈夫ですか。

豊年 2009/10/27(火) 11:32:07
お世話になっております。

残念ながら、
ご指摘のlibを入れてみても
だめでした。

ちなみに、どの名前のファイルを
消しに行こうとしてもだめなのですが、
「毎度おなじみのMBCSとUnicode」とは、
どういうことでしょうか?
(例えば、この場合だと、
どんな違いになるのでしょうか?)


それを確認してみても、
だめな場合は、
自分でプロジェクトも
作り直そうと思っています。
(実は、今は、ブロジェクトはもらって、既定のソースを
変えているのです。
ちなみに試しにそれをやってみたのですが、
コンパイルは通るものの、
リンク時に、
AVIStreamGetFrameだのAVIStreamLengthだので
軒並これらの命令が
InitAVIResourceやWinMain@16で
見つからないとのエラーです。
敢えて、
これらAVI動画関係の命令を
リンク時に見つけてもらうには、
どうすればいいでしょうか?   
別の単純なプログラムでは
どのファイルも同じDeleteFileで
消せているので、
ソース、リソース、ヘッダーを残しての、

プロジェクトの再生成に
希望をつないでいるのです。

PATIO 2009/10/27(火) 11:56:04
開発環境に関する提示が無いので皆さん心当たりを書いておられるのだと思います。

VisualStudio2005以降だったと思いますけれど、
プロジェクトで使う文字コードの既定値がUnicodeになっているので
使用する関数も全てUnicode用の関数になります。
関数が見つからないというエラーメッセージに出てくる関数名が
最後にWが付いた物になっているのでそういう指摘が来ているのでしょう。
Unicodeの文字列を指定するのであれば、_T("c:\\xxxx.bmp")のようにするか、
L"c:\\xxxx.bmp"としないと駄目だったはずです。

利用する為に必要なライブラリがリンクされていないのではないでしょうか?
プロジェクトの設定を見直して必要なライブラリがリンクされるようになっているか
を確認した方が良いと思います。
どうも、質問内容を見ているとこの辺りのプロジェクト設定周りの知識が
足りないような気がしますが、何処まで把握されているのでしょうか?
自分でプロジェクトを作成した後、必要なライブラリがリンク対象になるように
するにはプロジェクトのどの部分に設定すれば良いかはお分かりでしょうか?

ちなみにどのライブラリをリンクすれば良いかは、その関数をMSDNで調べれば、
わかると思いますよ。説明の最後の方にライブラリ名も載っていたはずです。

PATIO 2009/10/27(火) 11:58:32
ちなみにですが、開発環境は毎回必ず提示してください。
前と同じ人が見てくれることを期待した書き方は良く有りません。
全く初めての人が見るかもしれないと言うつもりで書いてください。
なので、開発環境や実行環境等の情報は毎回必ず必要です。

書いておいたほうが良いないように関しては、「使用上の注意」で
確認してください。

古いスレッドには追加発言できません。