2016-11-26 8 views
-1

)デスクトップでFILEを作成および操作するにはどのように、またどのようなライブラリが必要ですか? C#またはC++ではなく、Cのみを使用します。 私はCodeblocksを使用しています。私はallegroを使用しています。つまり、windows.h libを使用できないということです。プログラムはウィンドウで作業する必要があります。デスクトップでファイルを作成する方法(

+0

を使用() 'または' _sopen_s() ')、またはISO標準のC(' fopen() ')ですか?もちろん、GLibのようなサードパーティのライブラリもありますが、コンパイラがデフォルトで見つけられる場所にインストールされていない可能性もあります。 –

+0

私はfopenを使いたいのですが、私はなぜlibg windows.hを使うことができません、なぜ私はプログラムでアレグロを使用していますか? –

+0

WindowsライブラリとヘッダーファイルなしでWindowsプログラムを作成することはできません。または、クロスプラットフォームのソリューションが必要です。アレグロについての質問をするには、 'アレグロ'タグを使用してください。 –

答えて

0

あなたがWindows上にいるとすれば、CreateFileとそれに関連する機能を見たいと思うでしょう。

次のようにファイルのライフサイクルは次のとおりです。あなたはそれを作成(または、それが存在する場合は、それを開く)CreateFileを使用して、そしてそれが作成されたら/開け、あなたがたファイルは、それを操作するを扱う使用することができますすることができますReadFile,WriteFile、潜在的にDeleteFileである。作業が完了したら、CloseHandleでハンドルを閉じる必要があります。

0

1あなたがUnixやUnixライクなシステムを使用している場合、あなたのコード内で

system("touch ~/Desktop/FILE"); 

を呼び出すことができ、あなたは#include <stdlib.h>する必要があります。

これは、「touch〜/ Desktop/FILE」というコマンドを呼び出します。この後にファイルを処理(読み書き)したい場合は、fopenに正しいモードで呼び出す必要があります。しかし、2番目の方法は、ファイルに何かを書いておくほうがはるかに優れています。


2また、UnixやUnixライクなオペレーティングシステムで

を使用することができます。Windowsの場合 FILE *file = fopen("~/Desktop/FILE", "w+")

FILE *file = fopen("C:\\Users\\YOUR_USER_NAME\\Desktop\\FILE", "w+") (*デフォルトのユーザーフォルダの場所を使用していることを前提とします。)

これでファイルが作成され、その後にファイルを読み書きすることができます。正しいモードを使用してください。 Herefopenとモードのリファレンスです。覚えているのは#include <stdlib.h>です。

1

Windows Vista以降では、SHGetKnownFolderPathを使用して、デスクトップのパスを確認します。 Unicode関数を使用してファイルパスを取得する必要があります。_wfopen_sを使用してください。ファイルにANSIを記述できますが、UTF16を記述するか、テキストをUTF8に変換することをお勧めします。 WindowsのXPでは

#include <stdio.h> 
#include <Windows.h> 
#include <Shlobj.h> 

int main() 
{ 
    wchar_t *desktop; 
    if(S_OK == SHGetKnownFolderPath(&FOLDERID_Desktop, 0, NULL, &desktop)) 
    { 
     wprintf(L"Desktop path: %s\n", desktop); 

     wchar_t filename[MAX_PATH]; 
     swprintf_s(filename, MAX_PATH, L"%s\\%s", desktop, L"file.txt"); 
     wprintf(L"Filename path: %s\n", filename); 

     FILE *fp; 
     _wfopen_s(&fp, filename, L"w"); 
     if(fp) 
     { 
      fprintf(fp, "Hello world\n"); 
      fclose(fp); 
     } 
     else 
     { 
      wprintf(L"can't create file\n"); 
     } 

     CoTaskMemFree(desktop); 
    } 

    return 0; 
} 

は、Windows API( `のCreateFileを()`)を使用したかった...依存することPOSIXっぽいAPI( `_openをSHGetSpecialFolderPath(非推奨)

#include <stdio.h> 
#include <Windows.h> 
#include <Shlobj.h> 

int main() 
{ 
    wchar_t desktop[MAX_PATH]; 
    if(SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_DESKTOP | CSIDL_FLAG_CREATE, NULL, 0, desktop))) 
    { 
     wprintf(L"desktop: %s\n", desktop); 
     wchar_t path[MAX_PATH]; 
     swprintf(path, L"%s\\%s", desktop, L"filename.txt"); 

     HANDLE handle = CreateFileW(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
     if(handle != INVALID_HANDLE_VALUE) 
     { 
      DWORD temp; 
      const char *buf = "hello world"; 
      WriteFile(handle, buf, strlen(buf), &temp, NULL); 
      CloseHandle(handle); 
     } 
     else 
     { 
      printf("can't create file\n"); 
     } 
    } 
    return 0; 
} 
+0

あなたのプログラムをコンパイルすると、FOLDERID_Desktop undeclareteが作成されます。 –

+1

@DavidAmatoMantegari MinGWターゲットでは、上記の 'Windows.h'または' Shlobj.h 'のいずれかに自動的に含まれる 'knownfolders.h'ヘッダファイル内にあります。'SHGetKnownFolderPath()'が動作するためには、他のインクルードの前に '#include 'と '#define _WIN32_WINNT _WIN32_WINNT_VISTA'を付けて、コンパイルラインの最後に' -lole32'と '-luuid'を追加して必要なもの見つかるシンボルのライブラリ。 –

関連する問題