質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

3393閲覧

GetFileAttributesA();関数の使い方が知りたい。パスの指定方法等が知りたい。リファレンスを確認しました。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/08/26 06:31

編集2020/08/26 06:49

//関数部関数ですがパスをどのように設定すればいいのでしょうか?実行する.exeファイルがあるディレクトリ内からtest.txtを探すというプログラムです   

知りたいこと

どの関数を使ってもファイルがありませんと出力されます。
どうすればファイルを発見?できるのか知りたいです。

リファレンス: https://docs.microsoft.com/ja-jp/windows/win32/api/fileapi/nf-fileapi-getfileattributesa?redirectedfrom=MSDN

イメージ説明

int main() { //DWORD a = GetFileAttributes((LPCSTR)"test.txt"); //DWORD a = GetFileAttributesW((LPCWSTR)"test.txt"); DWORD a = GetFileAttributesA((LPCSTR)"test.txt");//// if(a != INVALID_FILE_ATTRIBUTES) { //printf("%s",a); printf("ファイル発見!\n"); }else { printf("ファイルがありません。\n"); } int _c_ = getchar(); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/08/26 06:33

GetFileAttributesやGetFileAttributesWではなく、GetFileAttributesAを呼び出している理由はどのようなものでしょうか?
can110

2020/08/26 06:35

パスの指定方法自体は特に問題ないと思われます。 現状、何が問題(困っている)なのかを記載ください。
退会済みユーザー

退会済みユーザー

2020/08/26 06:40

特に理由はありませんが以下のすべてを試しましたがどれもファイルがありませんと出力されます。 DWORD s = GetFileAttributes((LPCSTR)"test.txt"); DWORD w = GetFileAttributesW((LPCWSTR)"test.txt"); DWORD a = GetFileAttributesA((LPCSTR)"test.txt");
maisumakun

2020/08/26 06:48 編集

本題とは無関係ですが、GetFileAttributesが成功したときの返り値はビットマスクの組み合わせで、文字列ではありません。printfの%sで出力はできません。
退会済みユーザー

退会済みユーザー

2020/08/26 06:48

なるほど。ファイルを発見しました と文字列を表示できるようにコードを変更しました。
fana

2020/08/26 07:14

INVALID_FILE_ATTRIBUTESが返ってきたとき,GetLastErrorとかで理由を見てみればどうでしょう. (ファイルが無い以外の失敗理由があるのか不明ですが)
guest

回答2

0

int c = getchar();

から、VisualStudioからデバッグ実行しているものと思いますが

プロジェクトの設定→デバッグ→作業ディレクトリを確認し
そのディレクトリにtest.txtを設置してください

投稿2020/08/26 07:00

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

カレントディレクトリがEXEのある場所と異なると提示のような結果になりえます。
対処方法としてはGetModuleFileNameAで実行中のEXEパスが取得できますので、このパスを用いれば目的のファイルのフルパスを作ってアクセスすることができます。
具体的なソースはGetModuleFileName directory onlyなどで検索すると
実行ファイルと同じディレクトリにあるファイルへアクセスするなどいろいろ見つかると思います。

投稿2020/08/26 07:14

can110

総合スコア38278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/26 09:46

質問ですがワイルドカード? *.txt などといったディレクトリ内から.txtファイルだけを探すファイル名の検索方法などありますでしょうか?ディレクトリの最後です....\test.txtとしていますが全部のテキストファイルを探したい?です。
can110

2020/08/26 10:18

「FindFirstFile」でできます。検索してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問