File size: Difference between revisions

From Rosetta Code
Content added Content deleted
(added ocaml)
(added c)
Line 29: Line 29:
Integer'Image(File_Size(Name_2)) & " characters");
Integer'Image(File_Size(Name_2)) & " characters");
end Size;
end Size;

=={{header|C}}==
POSIX:
#include <stdio.h>
#include <sys/stat.h>
int main() {
struct stat foo;
stat("input.txt", &foo);
printf("%ld\n", foo.st_size);
stat("/input.txt", &foo);
printf("%ld\n", foo.st_size);
return 0;
}


=={{header|Clean}}==
=={{header|Clean}}==

Revision as of 01:15, 27 April 2008

Task
File size
You are encouraged to solve this task according to the task description, using any language you may know.

In this task, the job is to verify the size of a file called "input.txt" for a file in the current working directory and another one in the file system root.

Ada

with Ada.Text_Io;
with Ada.Direct_Io;

procedure Size is
   function File_Size (Name : String) return Natural is
      package Char_Io is new Ada.Direct_Io(Character);
      use Char_Io;
      The_File : Char_Io.File_Type;
      The_Size : Natural;
   begin
      Char_Io.Open(File => The_File, Name => Name, Mode => In_File);
      The_Size := Natural(Size(The_File));
      Close(The_File);
      return The_Size;
   end File_Size;
   Name_1 : String := "input.txt";
   Name_2 : String := "/input.txt";
begin
   Ada.Text_Io.Put_Line(Name_1 & " contains" & 
      Integer'Image(File_Size(Name_1)) & " characters");
   Ada.Text_Io.Put_Line(Name_2 & " contains" &
      Integer'Image(File_Size(Name_2)) & " characters");
end Size;

C

POSIX:

#include <stdio.h>
#include <sys/stat.h>

int main() {
  struct stat foo;
  stat("input.txt", &foo);
  printf("%ld\n", foo.st_size);
  stat("/input.txt", &foo);
  printf("%ld\n", foo.st_size);
  return 0;
}

Clean

There is not function to get the file size, therefore we seek to the end and query the file pointer position.

import StdEnv

fileSize fileName world
    # (ok, file, world) = fopen fileName FReadData world
    | not ok = abort "Cannot open file"
    # (ok, file) = fseek file 0 FSeekEnd
    | not ok = abort "Cannot seek file"
    # (size, file) = fposition file
      (_, world) = fclose file world
    = (size, world)

Start world = fileSize "input.txt" world

D

Alternative ways to get file size in D.

module fileio ;
import std.stdio ;
import std.path ;
import std.file ;
import std.mmfile ; // NB: mmfile can treat the file as an array in memory
import std.stream ;

string[] genName(string name){
  string cwd  = curdir ~ sep ; // on current directory
  string root = sep ;          // on root 
  // remove path, left only basename
  name = std.path.getBaseName(name) ;  
  // NB:in D ver.2, getBaseName is alias of basename
  return [cwd ~ name, root ~ name] ;
}

void testsize(string fname) {	
  foreach(fn ; genName(fname)){
    try {
      writefln("file %s has size:", fn) ;
      writefln("%10d bytes by std.file.getSize (function),", std.file.getSize(fn)) ;
      writefln("%10d bytes by std.stream (class),", (new std.stream.File(fn)).size) ;
      writefln("%10d bytes by std.mmfile (class).", (new std.mmfile.MmFile(fn)).length) ;
    } catch (Exception e) {
      writefln(e.msg) ;
    }
  }
}

void main(){
  writefln("== test : File Size ==") ;
  testsize(r".\input.txt") ;
}

Factor

"input.txt" file-length .
    1321
"file-does-not-exist.txt" file-length .
    f

Forth

: .filesize ( addr len -- ) 2dup type ."  is "
  r/o open-file throw
  dup file-size throw  <# #s #> type ."  bytes long." cr
  close-file throw ;

 s" input.txt" .filesize
s" /input.txt" .filesize

Groovy

println new File('index.txt').length();
println new File('/index.txt').length();

Java

import java.util.File;
public class FileSizeTest {
   public static long getFileSize(String filename) {
       return new File(filename).length();
   }
   public static void test(String type, String filename) {
       System.out.println("The following " + type + " called " + filename + 
           " has a file size of " + getFileSize(filename) + " bytes."
       );
   }
   public static void main(String args[]) {
        test("file", "input.txt");
        test("file", File.seperator + "input.txt");
   }
}

MAXScript

-- Returns filesize in bytes or 0 if the file is missing
getFileSize "index.txt"
getFileSize "\index.txt"

OCaml

#load "unix.cma";;
open Unix;;
Printf.printf "%d\n" (stat "input.txt").st_size;;
Printf.printf "%d\n" (stat "/input.txt").st_size;;

Perl

use File::Spec::Functions qw(catfile rootdir);
print -s 'input.txt';
print -s catfile rootdir, 'input.txt';

Pop11

 ;;; prints file size in bytes
 sysfilesize('input.txt') =>
 sysfilesize('/input.txt') =>

Python

import os

size = os.path.getsize('input.txt')
size = os.path.getsize('/input.txt')

Raven

'input.txt'  status.size
'/input.txt' status.size

Toka

A trivial method follows:

 " input.txt"  "R" file.open dup file.size . file.close
 " /input.txt" "R" file.open dup file.size . file.close

A better method would be to define a new function that actually checks whether the file exists:

 [ "R" file.open
   dup 0 <> [ dup file.size . file.close ] ifTrue
   drop
 ] is display-size
 
 " input.txt"  display-size
 " /input.txt" display-size

UNIX Shell

du input.txt
du /input.txt

Visual Basic .NET

Platform: .NET

Works with: Visual Basic .NET version 9.0+
Dim local As New IO.FileInfo("input.txt")
Console.WriteLine(local.Length)

Dim root As New IO.FileInfo("\input.txt")
Console.WriteLine(root.Length)