io.c: Add Remove_directory() and Remove_path()
Also implement WIN32 version of File_length()
This commit is contained in:
		
							parent
							
								
									60beebc9ac
								
							
						
					
					
						commit
						854d787e59
					
				@ -1743,10 +1743,10 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
 | 
			
		||||
            // Si c'est un fichier
 | 
			
		||||
            if (Selector->Position+Selector->Offset>=Filelist.Nb_directories)
 | 
			
		||||
              // On efface le fichier (si on peut)
 | 
			
		||||
              temp=(!remove(Selector_filename));
 | 
			
		||||
              temp=(!Remove_path(Selector_filename));
 | 
			
		||||
            else // Si c'est un repertoire
 | 
			
		||||
              // On efface le repertoire (si on peut)
 | 
			
		||||
              temp=(!rmdir(Selector_filename));
 | 
			
		||||
              temp=(!Remove_directory(Selector_filename));
 | 
			
		||||
 | 
			
		||||
            if (temp) // temp indique si l'effacement s'est bien passé
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										67
									
								
								src/io.c
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								src/io.c
									
									
									
									
									
								
							@ -360,20 +360,43 @@ int File_is_hidden(const char *fname, const char *full_name)
 | 
			
		||||
  return fname[0]=='.' && strcmp(fname, PARENT_DIR);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
// Taille de fichier, en octets
 | 
			
		||||
int File_length(const char * fname)
 | 
			
		||||
 | 
			
		||||
// File size in bytes
 | 
			
		||||
unsigned long File_length(const char * fname)
 | 
			
		||||
{
 | 
			
		||||
    struct stat infos_fichier;
 | 
			
		||||
    if (stat(fname,&infos_fichier))
 | 
			
		||||
        return 0;
 | 
			
		||||
    return infos_fichier.st_size;
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
  WIN32_FILE_ATTRIBUTE_DATA infos;
 | 
			
		||||
  if (GetFileAttributesExA(fname, GetFileExInfoStandard, &infos))
 | 
			
		||||
  {
 | 
			
		||||
    return (unsigned long)(((DWORD64)infos.nFileSizeHigh << 32) + (DWORD64)infos.nFileSizeLow);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
    return 0;
 | 
			
		||||
#else
 | 
			
		||||
  struct stat infos_fichier;
 | 
			
		||||
  if (stat(fname,&infos_fichier))
 | 
			
		||||
    return 0;
 | 
			
		||||
  return infos_fichier.st_size;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
int File_length_file(FILE * file)
 | 
			
		||||
 | 
			
		||||
unsigned long File_length_file(FILE * file)
 | 
			
		||||
{
 | 
			
		||||
    struct stat infos_fichier;
 | 
			
		||||
    if (fstat(fileno(file),&infos_fichier))
 | 
			
		||||
        return 0;
 | 
			
		||||
    return infos_fichier.st_size;
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
  // revert to old school way of finding file size
 | 
			
		||||
  long offset_backup;
 | 
			
		||||
  long file_length;
 | 
			
		||||
  offset_backup = ftell(file);
 | 
			
		||||
  fseek(file, 0, SEEK_END);
 | 
			
		||||
  file_length = ftell(file);
 | 
			
		||||
  fseek(file, offset_backup, SEEK_SET);
 | 
			
		||||
  return (unsigned long)file_length;
 | 
			
		||||
#else
 | 
			
		||||
  struct stat infos_fichier;
 | 
			
		||||
  if (fstat(fileno(file),&infos_fichier))
 | 
			
		||||
      return 0;
 | 
			
		||||
  return infos_fichier.st_size;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void For_each_file(const char * directory_name, void Callback(const char *, const char *))
 | 
			
		||||
@ -683,3 +706,25 @@ int Change_directory(const char * path)
 | 
			
		||||
  return chdir(path);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Remove_path(const char * path)
 | 
			
		||||
{
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
  return (DeleteFileA(path) ? 0 : -1);
 | 
			
		||||
#elif defined(__linux__)
 | 
			
		||||
  return unlink(path);
 | 
			
		||||
#else
 | 
			
		||||
  return remove(path);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
/// Remove the directory
 | 
			
		||||
int Remove_directory(const char * path)
 | 
			
		||||
{
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
  return RemoveDirectoryA(path) ? 0 : -1;
 | 
			
		||||
#else
 | 
			
		||||
  return rmdir(path);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								src/io.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/io.h
									
									
									
									
									
								
							@ -82,10 +82,10 @@ char * Find_last_separator(const char * str);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/// Size of a file, in bytes. Returns 0 in case of error.
 | 
			
		||||
int File_length(const char *fname);
 | 
			
		||||
unsigned long File_length(const char *fname);
 | 
			
		||||
 | 
			
		||||
/// Size of a file, in bytes. Takes an open file as argument, returns 0 in case of error.
 | 
			
		||||
int File_length_file(FILE * file);
 | 
			
		||||
unsigned long File_length_file(FILE * file);
 | 
			
		||||
 | 
			
		||||
/// Returns true if a file passed as a parameter exists in the current directory.
 | 
			
		||||
int File_exists(const char * fname);
 | 
			
		||||
@ -135,3 +135,11 @@ const char * Get_current_directory(char * buf, word * buf_unicode, size_t size);
 | 
			
		||||
///
 | 
			
		||||
/// Change current directory. return 0 for success, -1 in case of error
 | 
			
		||||
int Change_directory(const char * path);
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
/// Remove the file
 | 
			
		||||
int Remove_path(const char * path);
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
/// Remove the directory
 | 
			
		||||
int Remove_directory(const char * path);
 | 
			
		||||
 | 
			
		||||
@ -1941,5 +1941,5 @@ void Remove_file(T_IO_Context *context)
 | 
			
		||||
 | 
			
		||||
  Get_full_filename(filename, context->File_name, context->File_directory);
 | 
			
		||||
 | 
			
		||||
  remove(filename);
 | 
			
		||||
  Remove_path(filename);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user