Bonjour à tous!
Alors, dans le cadre d'une application en temps réel, j'ai choisis d'effectuer du mapping (pour la vitesse et surtout car j'utilise des fichiers de plus de 500Mo), mais j'ai quelques soucis, je vous poste le code et je vous explique.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int			file_mapper()
{
  char			*file;
  HANDLE		fm = NULL;
  HANDLE		fd = NULL;
  char			*data;
  _BY_HANDLE_FILE_INFORMATION *info = NULL;
 
  file = _strdup(correct_path(csv_file)); /* Ici, je remplace les '\' par des '/' histoire que se soit compatible avec api Win32 */
 
  fd = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 
  fm = CreateFileMapping(fd,NULL,PAGE_READONLY, info->nFileSizeHigh, 0, 0);
 
  if (!fm)
  {
    printf ("Error when creating\n");
    return 0;
  }
 
  data = (char*)MapViewOfFile(fm, FILE_MAP_READ, 0, 0, 0);
 
  if (!data)
  {
    printf ("Error when viewing\n");
    CloseHandle(fm);
    return 0;
  }
 
  UnmapViewOfFile(data);
  CloseHandle(fm);
  CloseHandle(fd);
 
  return (0);
}
Et le souci, c'est que fd pointe sur 0xFFFFFFFF (ce qui est le retour erreur d'apres le msdn...) et je ne sais pas pourquoi!
J'ai bien les droits, je suis le seul à utiliser le fichier, enfin je pense faire tout bien (oui je sais je ne serais pas la si c'était le cas ).
Donc si quelqu'un à une petit idée!
Merci d'avance!