ファイルの読み込み
Re:ファイルの読み込み
めんどくさいのでDLLを使ってみてはどうですか?
http://hira.hopto.org/
のhttpget.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の部分は適切なアドレスに書き変えてください。
Re:ファイルの読み込み
簡単に答えてしまいましたが、「ネット上にあるファイルを読み込む」と言っても
httpやftpなどのいろいろなプロトコルがあります。
上の方法はhttpの場合のみ使えます。
httpやftpなどのいろいろなプロトコルがあります。
上の方法はhttpの場合のみ使えます。
Re:ファイルの読み込み
まじめにやるならこのサイトなどを参考にしてみてください。
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
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

Re:ファイルの読み込み
エラー 1 error C2664: 'LoadLibraryW' : 1 番目の引数を 'const char [12]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
エラー 2 error C2440: '=' : 'FARPROC' から 'int (__stdcall *)(char *,char *,int,int)' に変換できません。
て出てきますがどうしてでしょうか?
エラー 2 error C2440: '=' : 'FARPROC' から 'int (__stdcall *)(char *,char *,int,int)' に変換できません。
て出てきますがどうしてでしょうか?
Re:ファイルの読み込み
試していないのですが、最初のエラーは、
s_hm = LoadLibrary(_T("httpget.dll")); // _T がダメなら TEXT で
として、2番目のエラーは
GetHttpData = (int (__stdcall*)(char*,char*,int,int))GetProcAddress(s_hm, "GetHttpData");
とすれば動くかもしれないです。
s_hm = LoadLibrary(_T("httpget.dll")); // _T がダメなら TEXT で
として、2番目のエラーは
GetHttpData = (int (__stdcall*)(char*,char*,int,int))GetProcAddress(s_hm, "GetHttpData");
とすれば動くかもしれないです。

Re:ファイルの読み込み
_T を使うには tchar.h のインクルードが必要ですね。
TEXT マクロは winnt.h に定義されていて、これは windows.h の中でインクルードされているので、windows.h をインクルードすれば使えます。
TEXT マクロは winnt.h に定義されていて、これは windows.h の中でインクルードされているので、windows.h をインクルードすれば使えます。
Re:ファイルの読み込み
実行は出来ましたけど
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;
}
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;
}
Re:ファイルの読み込み
出来ました
(@^▽^@)
ありがとうございます
゜+。゜感謝★☆(´∀`人)☆★感激゜。+゜
教えてくれた皆さん本当にありがとうございました
(@^▽^@)
ありがとうございます
゜+。゜感謝★☆(´∀`人)☆★感激゜。+゜
教えてくれた皆さん本当にありがとうございました
Re:ファイルの読み込み
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;}
}
↑で出来ますかね?
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;}
}
↑で出来ますかね?
Re:ファイルの読み込み
プログラミングの勉強のためには、まず試してみることが大事ですよ。
確認手段が分からないなら聞いてください。デバッガとか使えますか?
または、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;は非常にまずいことになります。
確認手段が分からないなら聞いてください。デバッガとか使えますか?
または、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;は非常にまずいことになります。
Re:ファイルの読み込み
これでどうでしょうか。
#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:ファイルの読み込み
自分のプログラムに機能を組込みたいのであれば、libcurlを使うのが一番簡単な気がします。
http://curl.haxx.se/libcurl/
これなら、httpだろうがhttpsだろうが、はたまたftpだろうがftpsだろうが、難なく読めてしまいます。
外部プログラムを使ってよいのであれば、wgetが一番楽だと思います。
http://gnuwin32.sourceforge.net/packages/wget.htm
http://curl.haxx.se/libcurl/
これなら、httpだろうがhttpsだろうが、はたまたftpだろうがftpsだろうが、難なく読めてしまいます。
外部プログラムを使ってよいのであれば、wgetが一番楽だと思います。
http://gnuwin32.sourceforge.net/packages/wget.htm