2016-11-26 1 views
-1

Comment, et de quelles bibliothèques ai-je besoin pour créer et manipuler un FICHIER dans le Bureau? en utilisant seulement C, pas C# ou C++. J'utilise Codeblocks, j'utilise allegro, ce qui signifie que je ne peux pas utiliser windows.h lib, Le programme doit fonctionner dans Windows.Comment créer un FICHIER dans Desktop, en utilisant c

+0

... Est-ce que cela dépend que vous voulez utiliser l'API Windows ('CreateFile()'), l'API Posix-ish ('_open() 'ou' _sopen_s() '), ou la norme ISO C (' fopen() ')? Bien sûr, vous pouvez également utiliser des bibliothèques tierces, telles que GLib, même si vous ne les avez probablement pas installées dans un endroit où votre compilateur peut les trouver par défaut, si elles sont installées. –

+0

Je veux utiliser le fopen, et je ne peux pas utiliser le lib windows.h pourquoi j'utilise allegro dans le programme. –

+0

Vous ne pouvez pas écrire un programme Windows sans les bibliothèques Windows et les fichiers d'en-tête. Ou vous avez besoin d'une solution multi-plateforme. Utilisez la balise 'allegro' pour poser une question à propos d'allegro. –

Répondre

0

Étant donné que vous êtes sur Windows, vous devriez regarder CreateFile et ses fonctions associées.

Le cycle de vie d'un fichier est la suivante: Vous pouvez créer (ou, si elle existe, ouvrez-le) à l'aide CreateFile, et une fois qu'il est créé/ouvert, vous pouvez utiliser le fichier résultant poignée pour le manipuler avec ReadFile, WriteFile, et potentiellement DeleteFile. Une fois que vous avez terminé, vous devez fermer la poignée avec CloseHandle.

0

1 Si vous utilisez Unix ou un système Unix, vous pouvez appeler

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

dans votre code, et vous devez #include <stdlib.h>.

Ceci appelle la commande "touch ~/Desktop/FILE". Si vous voulez gérer (lire/écrire) le fichier après cela, vous devez appeler fopen avec le mode correct. Mais la 2ème méthode est beaucoup mieux si vous voulez écrire quelque chose dans le fichier.


2 Vous pouvez également utiliser

Pour les systèmes d'exploitation Unix ou Unix: FILE *file = fopen("~/Desktop/FILE", "w+")

Pour Windows: FILE *file = fopen("C:\\Users\\YOUR_USER_NAME\\Desktop\\FILE", "w+") (* Sur la vous utilisez l'emplacement par défaut du dossier utilisateur.)

Cela crée le fichier, puis vous pouvez lire/écrire dans le fichier après cela. Assurez-vous d'utiliser le bon mode. Here est une référence pour fopen et modes. N'oubliez pas de #include <stdlib.h>.

1

Sous Windows Vista ou version ultérieure, utilisez SHGetKnownFolderPath pour trouver le chemin d'accès au bureau. Vous devez utiliser les fonctions Unicode pour obtenir le chemin du fichier, utilisez _wfopen_s. Vous pouvez écrire ANSI dans le fichier, mais il est recommandé d'écrire UTF16 ou de convertir du texte en UTF8.

#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; 
} 

Sous Windows XP utilisent SHGetSpecialFolderPath (dépréciée)

#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

lorsque je compile votre programme, appers FOLDERID_Desktop Undeclarete. –

+1

@DavidAmatoMantegari Sur les cibles MinGW, vous devriez le trouver dans le fichier d'en-tête 'knownfolders.h' qui est automatiquement inclus avec l'un des fichiers' Windows.h' ou 'Shlobj.h' ci-dessus.Pour 'SHGetKnownFolderPath()' fonctionner, j'ai dû '#include ' et '#define _WIN32_WINNT _WIN32_WINNT_VISTA' avant tout autre ajout et ajouter' -lole32' et '-luuid' à la fin de ma ligne de compilation pour lier le nécessaire bibliothèques pour les symboles à trouver. –