FILENAME.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:3k
源码类别:

操作系统开发

开发平台:

DOS

  1. #include <string.h>
  2. #include <io.h>
  3. #include <stdio.h>
  4. #include <rtos.h>
  5. #include <filename.h>
  6. #if defined(__DJGPP__)
  7. #include <unistd.h>
  8. #endif
  9. //----------------------------------------------------------------------
  10. // FileGetPath - copies a file's path (but not file name) to a new location
  11. void FileGetPath( char *filename, char *buffer )
  12. {
  13.     char *p;
  14.     strcpy( buffer, filename );
  15.     /* look for last , the one preceding the filename */
  16.     if ( (p = strrchr(buffer,'\' )) == NULL ) {
  17.         if ( buffer[1] == ':' ) p = buffer + 2;
  18.         else p = buffer;
  19.     }
  20.     *p = 0;
  21. }
  22. //----------------------------------------------------------------------
  23. // FileGetName - copies a file's name (discarding path) and ext to new location
  24. void FileGetName( char *filename, char *buffer )
  25. {
  26.     int len;
  27.     /* start by finding length of the path */
  28.     FileGetPath( filename, buffer );
  29.     len = strlen( buffer );
  30.     /* and note that '' must be skipped */
  31.     if ( filename[ len ] == '\' ) len++;
  32.     strcpy( buffer, filename + len );
  33. }
  34. //----------------------------------------------------------------------
  35. // FileGetExt - returns pointer to extension within this filename
  36. //            - if no extension, returns pointer to "" so still usable string
  37. char *FileGetExt( char *filename )
  38. {
  39.     char *p, *q;
  40.     /* look for  preceding filename */
  41.     if ( (p = strrchr(filename,'\' )) == NULL ) p = filename;
  42.     /* p now points to filename, or x: but past all preceding .'s */
  43.     if ( ( q = strchr( p, '.' )) == NULL )
  44.         q = strchr( p, 0 );
  45.     return( q );
  46. }
  47. //----------------------------------------------------------------------
  48. // FileChangeExt - copy apply a new extension to a file name
  49. //               - accepts .ext or ext
  50. void FileChangeExt( const char *filename, const char *newext, char *buffer )
  51. {
  52.     char *q;
  53.     strcpy( buffer, filename );
  54.     /* q points to . or terminating zero */
  55.     q = FileGetExt( buffer );
  56.     if ( *newext != '.' ) *q++ = '.';
  57.     strcpy( q, newext );
  58. }
  59. //----------------------------------------------------------------------
  60. // FileExists - returns 1 if true
  61. int FileExists( const char *filename )
  62. {
  63.     int result ;
  64.     dos_enter();
  65.     result = access( filename, 0 ) == 0 ;
  66.     dos_exit();
  67.     return( result );
  68. }
  69. //----------------------------------------------------------------------
  70. // FileRenameExt - renames file to a given extension in same directory
  71. int FileRenameExt( char *filename, char *newext )
  72. {
  73.     char *buffer;
  74.     int result = 0;
  75.     if ( (buffer = kcalloc( 128 , 1 )) == NULL ) return( 0 );
  76.     do {
  77.         FileChangeExt( filename, newext, buffer );
  78.         if ( FileExists( buffer ))
  79.             if ( unlink( buffer ) ) break;
  80.         result = !rename( filename, buffer );
  81.     } while ( 0 );
  82.     kfree( buffer );
  83.     return( result );
  84. }