ファイルの読み込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kokuoutyou

ファイルの読み込み

#1

投稿記事 by kokuoutyou » 15年前

ネット上にあるファイル(test.txt)
を読み込む事とって出来ますか?

みけCAT

Re:ファイルの読み込み

#2

投稿記事 by みけCAT » 15年前

めんどくさいのでDLLを使ってみてはどうですか?
http://hira.hopto.org/
のhttpget.dllを使ってみてください。
#include <stdio.h>
#include <windows.h>

static HMODULE s_hm;
static int (__stdcall *GetHttpData)(char*,char*,int,int);

int main(void) {
    char buf[1000000];
    s_hm = LoadLibrary("httpget.dll");
    if(s_hm==NULL) {
        printf("error1\n");
        return 1;
    }
    GetHttpData=GetProcAddress(s_hm, "GetHttpData");
    if(GetHttpData==NULL) {
        printf("error2\n");
        return 1;
    }
    GetHttpData("http://127.0.0.1/test.txt",buf,sizeof(buf),0);
    puts(buf);
    return 0;
}
http://127.0.0.1/test.txtの部分は適切なアドレスに書き変えてください。

みけCAT

Re:ファイルの読み込み

#3

投稿記事 by みけCAT » 15年前

簡単に答えてしまいましたが、「ネット上にあるファイルを読み込む」と言っても
httpやftpなどのいろいろなプロトコルがあります。
上の方法はhttpの場合のみ使えます。

みけCAT

Re:ファイルの読み込み

#4

投稿記事 by みけCAT » 15年前

まじめにやるならこのサイトなどを参考にしてみてください。
http://www.nakka.com/lib/inet/httpc.html
ただしこれもhttpの場合のみです。
ftpの場合はこちらが参考になるかもしれません。
http://x68000.q-e-d.net/~68user/net/ftp-1.html

(追記)
下のサイトは、C言語の場合はこっちでした。
http://x68000.q-e-d.net/~68user/net/c-ftp-1.html 画像

kokuoutyou

Re:ファイルの読み込み

#5

投稿記事 by kokuoutyou » 15年前

エラー 1 error C2664: 'LoadLibraryW' : 1 番目の引数を 'const char [12]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)

エラー 2 error C2440: '=' : 'FARPROC' から 'int (__stdcall *)(char *,char *,int,int)' に変換できません。
て出てきますがどうしてでしょうか?

みけCAT

Re:ファイルの読み込み

#6

投稿記事 by みけCAT » 15年前

VCを使っているのですね。
対処法はまた後で調べたいと思います。

めるぽん

Re:ファイルの読み込み

#7

投稿記事 by めるぽん » 15年前

試していないのですが、最初のエラーは、
s_hm = LoadLibrary(_T("httpget.dll")); // _T がダメなら TEXT で
として、2番目のエラーは
GetHttpData = (int (__stdcall*)(char*,char*,int,int))GetProcAddress(s_hm, "GetHttpData");
とすれば動くかもしれないです。 画像

みけCAT

Re:ファイルの読み込み

#8

投稿記事 by みけCAT » 15年前

_Tを使うにはヘッダのインクルードが必要だった気がします。
tchar.hかtext.hだったかな?
違っていたらすみません。

lbfuvab

Re:ファイルの読み込み

#9

投稿記事 by lbfuvab » 15年前

プロジェクトの設定をマルチバイト文字にすればそのままでいけませんか?

めるぽん

Re:ファイルの読み込み

#10

投稿記事 by めるぽん » 15年前

_T を使うには tchar.h のインクルードが必要ですね。
TEXT マクロは winnt.h に定義されていて、これは windows.h の中でインクルードされているので、windows.h をインクルードすれば使えます。

kokuoutyou

Re:ファイルの読み込み

#11

投稿記事 by kokuoutyou » 15年前

実行は出来ましたけど
error1って出てきて意味が分かりません


#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#include <windows.h>

static HMODULE s_hm;
static int (__stdcall *GetHttpData)(char*,char*,int,int);

int main(void) {
char buf[1000000];
s_hm = LoadLibrary(_T("httpget.dll")); // _T
if(s_hm==NULL) {
printf("error1\n");
while(true);
return 1;
}
GetHttpData = (int (__stdcall*)(char*,char*,int,int))GetProcAddress(s_hm, "GetHttpData");
if(GetHttpData==NULL) {
printf("error2\n");
while(true);
return 1;
}
GetHttpData("http://share.kokuoutyou.server.co.jp/test.txt",buf,sizeof(buf),0);
puts(buf);
while(true);
return 0;
}

kokuoutyou

Re:ファイルの読み込み

#12

投稿記事 by kokuoutyou » 15年前

_Tと_TEXTでも出来ませんでした

kokuoutyou

Re:ファイルの読み込み

#13

投稿記事 by kokuoutyou » 15年前

出来ましたw
読み込めましたけど文字化けして読めません

toyo

Re:ファイルの読み込み

#14

投稿記事 by toyo » 15年前

文字列の終端が無いためではないでしょうか
char buf[1000000] = {0};
で初期化してみてください

kokuoutyou

Re:ファイルの読み込み

#15

投稿記事 by kokuoutyou » 15年前

出来ました
(@^▽^@)
ありがとうございます
゜+。゜感謝★☆(´∀`人)☆★感激゜。+゜
教えてくれた皆さん本当にありがとうございました

kokuoutyou

Re:ファイルの読み込み

#16

投稿記事 by kokuoutyou » 15年前

解決いたしました

kokuoutyou

Re:ファイルの読み込み

#17

投稿記事 by kokuoutyou » 15年前

あのー
一行ずつ読み取るにはどうしたらいいでしょうか?

softya

Re:ファイルの読み込み

#18

投稿記事 by softya » 15年前

自分で改行コードを判定して一行に分解してください。

kokuoutyou

Re:ファイルの読み込み

#19

投稿記事 by kokuoutyou » 15年前

char b[100][100]={0};
char a[10000]={0};
int g=0;

for(int i=0;i<10000;i++)
{
if(a=='\\'){if(a[i+1]=='n'){g++}}
else{b[g]=a;}
}

↑で出来ますかね?

softya

Re:ファイルの読み込み

#20

投稿記事 by softya » 15年前

プログラミングの勉強のためには、まず試してみることが大事ですよ。
確認手段が分からないなら聞いてください。デバッガとか使えますか?
または、printfしても良いですね。

注意点だけ。
改行コードが1バイトか2バイトかはWindows/Linuxなどの環境に依存します。
http://ja.wikipedia.org/wiki/%E6%94%B9% ... C%E3%83%89
なので'\n'は改行コードですので1バイトか2バイトの場合がありえますが、'\n'を2つに分解したら意味がまったく違います。'\\'は単なる\の文字で'n'は単なる小文字のエヌです。
なのでif(a=='\\'){if(a[i+1]=='n')は間違いです。
それとデバッガで追いかけると分かりますが、b[g]=a;は非常にまずいことになります。

みけCAT

Re:ファイルの読み込み

#21

投稿記事 by みけCAT » 15年前

これでどうでしょうか。
#include <stdio.h>
#include <string.h>

int bunkatu(char**,char*);

int main(void) {
    /*改行コードが混ざっていても大丈夫*/
    /*改行が連続しても大丈夫*/
    char taisyou[/url]="abc\r\ndef\nghi\rjkl\r\n\r\naa\n\nbb\r\rcc";
    int i;
    char** saisyo;
    int lines;
    lines=bunkatu(NULL,taisyou);
    saisyo=calloc(lines,sizeof(char*));
    bunkatu(saisyo,taisyou);
    for(i=0;i<lines;i++) {
        printf("%3d行目:[%s]\n",i+1,saisyo); 
    }
    free(saisyo);
    return 0;
}

/*
 result:各行の先頭のポインタを入れる配列のポインタ
        NULLにすると行数のみを取得する。
taisyou:行ごとに分割する対象の文字列
        分割するとこの文字列が直接書き変わる。
        resultをNULLにした場合は書き変わらない。
 戻り値:分割した行数 
*/
int bunkatu(char** result,char* taisyou) {
    int i;
    int lines=1;
    int status=0;
    if(result!=NULL) {
        result[0]=taisyou;
    }
    for(i=0;taisyou!=0;i++) {
        if(taisyou==0x0D) {
            if(status) {
                if(result!=NULL)result[lines]=&taisyou;
                lines++;
            }
            status=1;
            if(result!=NULL)taisyou=0;
        } else if(taisyou==0x0A) {
            if(status==2) {
                if(result!=NULL)result[lines]=&taisyou;
                lines++;
            }
            status=2;
            if(result!=NULL)taisyou=0;
        } else {
            if(status) {
                if(result!=NULL)result[lines]=&taisyou;
                lines++;
            }
            status=0;
        }
    }
    return lines;
}

たかぎ

Re:ファイルの読み込み

#22

投稿記事 by たかぎ » 15年前

自分のプログラムに機能を組込みたいのであれば、libcurlを使うのが一番簡単な気がします。
http://curl.haxx.se/libcurl/
これなら、httpだろうがhttpsだろうが、はたまたftpだろうがftpsだろうが、難なく読めてしまいます。

外部プログラムを使ってよいのであれば、wgetが一番楽だと思います。
http://gnuwin32.sourceforge.net/packages/wget.htm

閉鎖

“C言語何でも質問掲示板” へ戻る