Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación
Módulo 3A: Programación
ÍNDICE
1. Introducción a la programación ............................................................ 3
2
Módulo 3A: Programación
1. Introducción a la programación
Un programa es un conjunto de instrucciones dadas al ordenador en un
lenguaje que solo es entendible por él para comunicarle lo que queremos que
haga. Un algoritmo es una secuencia finita de operaciones que resuelven un
determinado problema.
Representaciones gráficas
3
Módulo 3A: Programación
Operaciones de entrada/salida de
datos. Por ejemplo: visualiza en
pantalla suma.
Representa un método o
subprograma.
4
Módulo 3A: Programación
• Todos los símbolos de decisión deben tener más de una línea de salida,
es decir, deben indicar qué camino seguir en función de la decisión
tomada.
Ejemplo
5
Módulo 3A: Programación
Algoritmo triángulo
Definir área, altura, base de tipo números reales;
Escribir “Introduce la altura del triángulo:”;
Leer altura;
Escribir “Introduce la base del triángulo:”;
Leer base;
Área <- (a*b)/2;
Escribir “El área del triángulo es:”, área;
FinAlgoritmo
6
Módulo 3A: Programación
Algunos ejemplos de lenguajes de alto nivel son java, php, c#, VB.NET,
Python…
7
Módulo 3A: Programación
8
Módulo 3A: Programación
C# Java
9
Módulo 3A: Programación
Con C#, podemos crear aplicaciones con una interfaz de texto, que
denominamos aplicaciones de consola.
Una de las ventajas de aprender este lenguaje es que es independiente de la
plataforma donde lo ejecutemos (sea Intel o AMD).
10
Módulo 3A: Programación
Este fichero que se genera debe tener la extensión cs, ya que es la extensión
utilizada por los ficheros en C#.
https://visualstudio.microsoft.com/es/downloads/
11
Módulo 3A: Programación
Instalación de MonoDevelop
https://www.monodevelop.com/download/#fndtn-download-lin
12
Módulo 3A: Programación
13
Módulo 3A: Programación
14
Módulo 3A: Programación
CÓDIGO:
using System;
namespace MiAplicación
{
class Program
{
static void Main(string[] args)
{
}
}
}
La estructura que Visual Studio nos crea por defecto es la clase program. Una
clase es una estructura de datos que está compuesta por atributos o variables
(de las que hablaremos más adelante) y métodos o funciones. El método
principal se denomina Main.
De hecho, siempre que ejecutemos un programa, el primer método que se
ejecutará será el Main. Este método tiene una serie de argumentos. Estos
argumentos son cadenas de caracteres que podemos pasar línea de
comandos (CMD):
• Para la salida por pantalla, podemos utilizar los métodos de esta clase,
Write y Writeline:
15
Módulo 3A: Programación
CÓDIGO:
using System;
namespace MiAplicación
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.Write("Programming...");
}
}
}
La salida será:
CÓDIGO:
using System;
namespace MiAplicación
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Introduce un dato”);
string dato = ReadLine();
}
}
}
16
Módulo 3A: Programación
Otra forma para recoger los datos de entrada de usuario es el método Read().
Este método leerá el dato introducido por el usuario y devolverá un dato de
tipo entero (int).
https://docs.microsoft.com/es-
es/dotnet/api/system.console?view=netframework-4.8
CÓDIGO:
class Program
{
static void Main(string[] args)
{
int numero;
numero = 10;
char letra = 'a';
string cadena = "Esta es una cadena";
}
}
17
Módulo 3A: Programación
Para definir una variable, necesitamos conocer primero el tipo de datos que
va a almacenar y, a continuación, el nombre que le vamos a asignar. Es
recomendable que este nombre tenga relación con el ejercicio que estemos
desarrollando.
• Debe estar formada por caracteres del alfabeto (no podemos usar “ñ”)
o por dígitos (del 0 al 9). Se puede utilizar el subrayado ("_").
18
Módulo 3A: Programación
https://docs.microsoft.com/es-es/dotnet/csharp/language-
reference/keywords/
CÓDIGO:
<tipo> <nombre_variable>;
CÓDIGO:
int num;
CÓDIGO:
int num=5;
19
Módulo 3A: Programación
CÓDIGO:
Por ejemplo:
CÓDIGO:
20
Módulo 3A: Programación
CÓDIGO:
class Calendar1
{
public const int dias_semanas = 7;
}
• Literales
• Literales enteros:
o Decimales: sin ningún prefijo. Por ejemplo: int dLiteral = 10;
o Hexadecimales: con el prefijo de 0x o 0X. Por ejemplo: int
hLiteral= 0x3F;
• Literales reales:
o El literal sin sufijo o con el sufijo d o D es del tipo double.
Por ejemplo: double num = 3.4d;
Double num2= 3.4;
o El literal con el sufijo f o F es del tipo float.
Por ejemplo: float variable = 4.5F;
o El literal con el sufijo m o M es del tipo decimal.
Por ejemplo: decimal numero = 3.2m;
21
Módulo 3A: Programación
Carácter Representación
Comilla simple \’
Comilla doble \”
Carácter nulo \0
Retroceso \b
Salto de página \f
Nueva línea \n
Retorno de carro \r
Tabulación horizontal \t
Tabulación vertical \v
Operadores aritméticos
22
Módulo 3A: Programación
CÓDIGO:
CÓDIGO:
• Operadores booleanos
Operadores booleanos
23
Módulo 3A: Programación
^ XOR lógico.
! Negación lógica.
a b a^b
T T F
T F T
F T T
F F F
24
Módulo 3A: Programación
Operadores de comparación
> Mayor.
< Menor.
== Igual.
!= desigualdad.
= Asignación.
CÓDIGO:
int numero=10;
numero = “a”; // No se puede convertir implícitamente el tipo
'string' en 'int'
25
Módulo 3A: Programación
CÓDIGO:
int a = 300;
long numero=a;
CÓDIGO:
Parse y TryParse
Con los métodos Parse y TryParse, podemos convertir una cadena en varios
tipos numéricos: int, decimal, double…
El método Parse devuelve el número convertido. El método TryParse devuelve
un valor booleano indicando si la conversión se realizó correctamente o no, y
devuelve el número convertido.
26
Módulo 3A: Programación
CÓDIGO:
Console.WriteLine(miNumero);
Convert
Es una clase que convierte un tipo de datos en otro. Algunos métodos son:
Método Descripción
ToBoolean Convierte un valor especificado en un valor
booleano
ToChar Convierte un valor especificado en un carácter
ToDecimal Convierte un valor especificado en un número
decimal
ToDouble Convierte un valor especificado en un número
de punto flotante
ToInt16 Convierte un valor especificado en un entero
de 16 bits
ToInt32 Convierte un valor especificado en un entero
de 32 bits
ToInt64 Convierte un valor especificado en un entero
de 64 bits
ToString Convierte un valor especificado en su
representación de cadena
CÓDIGO:
27
Módulo 3A: Programación
CÓDIGO:
Ejemplo
Float x,y;
x=a/b;
c=a<b && c;
d= a + b++;
e= ++a - b;
y= (float)a / b;
28
Módulo 3A: Programación
● Comentarios de una línea: son frases cortas y, por tanto, solo pueden
ocupar una línea del código. Debemos de escribir “//” antes de
comenzar con dichas anotaciones.
CÓDIGO:
29
Módulo 3A: Programación
3. Programación estructurada
La programación estructurada es un procedimiento que consiste en diseñar e
implementar programas de forma clara y sencilla para que puedan ser
mantenidos con facilidad.
- Selección de instrucciones.
1
Serna, M. E. (2009). Edsger Wybe Dijkstra. Revista Digital Lámpsakos, no. 2, pp. 107-11.
2
Corrado Böhm, Giuseppe Jacopini. (1966). Flow diagrams, turing machines and languages
with only two formation rules. 2020, de ACM Digital Library, Association for Computing
Machinery. Sitio web: https://dl.acm.org/doi/pdf/10.1145/355592.365646
30
Módulo 3A: Programación
31
Módulo 3A: Programación
32
Módulo 3A: Programación
33
Módulo 3A: Programación
34
Módulo 3A: Programación
• Tipos simples
Debemos tener en cuenta que el tipo de datos simple no está compuesto por
otros tipos, y que contiene un valor único.
35
Módulo 3A: Programación
CÓDIGO:
int x = (int)dias.Domingo;
int y = (int)dias.Viernes;
/* Salida:
Domingo = 0
Viernes = 5
*/
Sintaxis:
CÓDIGO:
36
Módulo 3A: Programación
Por ejemplo:
CÓDIGO:
int[] array2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
CÓDIGO:
miArray [1]=’z’;
Console.WriteLine(miArray[1]);
// Guardamos en la posición 1, el carácter z. Por lo que, por pantalla, mostrará ese carácter
en esa posición. Ahora el vector estaría formado por {‘a’, ‘z’, ‘c’, ‘d’, ‘e’}
37
Módulo 3A: Programación
Sintaxis:
CÓDIGO:
Por ejemplo:
CÓDIGO:
En este caso:
38
Módulo 3A: Programación
SI CONDICIÓN ENTONCES:
INSTRUCCIONES_1
FIN SI;
SI CONDICIÓN ENTONCES:
INSTRUCCIONES_1;
SI NO:
INSTRUCCIONES_2;
FIN SI;
39
Módulo 3A: Programación
• Operadores lógicos
&& AND: ambas condiciones deben cumplirse para entrar en el bloque IF.
|| OR: es suficiente con que una de las condiciones se cumpla para entrar en el bloque
IF.
^ XOR: El resultado se evalúa como true si una condición se evalúa como false y otra
como true.
Si ambas condiciones se evalúan como false o como true, el resultado será false.
FIN SI;
FIN SI;
40
Módulo 3A: Programación
FIN SI:
Es una instrucción de selección que elige una sola acción de una lista de
opciones en función de una coincidencia de distintos patrones con la
expresión.
CÓDIGO:
using System;
int var = 1;
switch (var)
case 1:
Console.WriteLine("Caso 1");
break;
case 2:
41
Módulo 3A: Programación
Console.WriteLine("Caso 2");
break;
default:
Console.WriteLine("Otro caso");
break;
// La salida mostrada será Caso 1 porque nuestra variable ‘var’ contiene el valor 1.
• Mientras (While)
Mientras que se cumpla una condición, el código incluido dentro del bucle se
repite. La condición se evalúa al principio, por lo que puede que no llegue a
ejecutarse nunca.
Instrucción_1;
Instrucción_2;
…;
Instrucción_N;
ModificarCondición;
FinMientras;
42
Módulo 3A: Programación
Hacer
Instrucción_1;
Instrucción_2;
Instrucción_N;
ModificarCondición;
Mientras CONDICIÓN;
• Para
Para CONDICIÓN
Instrucción1;
Instrucción2;
InstrucciónN;
ModificarCondición;
43
Módulo 3A: Programación
• Foreach
CÓDIGO:
Ejemplo 1
// creamos una variable días de tipo entero que nos servirá para recorrer
cada elemento del array diasMes
Ejemplo2
List‹string› ListaColores = new List‹string›(); //creamos una lista de tipo string
ListaColores.Add ("Azul");
ListaColores.Add ("Rojo");
ListaColores.Add ("Verde");
ListaColores.Add ("Amarillo");
ListaColores.Add ("Morado");
Console.WriteLine ( color );
44
Módulo 3A: Programación
continue Se utiliza en sentencias repetitivas con bucles for, foreach, while y do… while.
Transfiere el control a la siguiente iteración.
Console.ReadKey();
return Esta estructura de salto obliga a que finalice la ejecución de una determinada
función. Normalmente se utiliza para devolver el control a la función de
llamada.
45
Módulo 3A: Programación
CÓDIGO:
CÓDIGO:
new
El operador new crea una nueva instancia de un tipo.
La palabra new crea un objeto tipo string al que pasamos el parámetro letras
como una tabla de caracteres.
46
Módulo 3A: Programación
SubString() Extrae parte de una cadena. Método que puede ser sobrecargado
indicando su inicio y su fin: SubString (int inicio) o SubString (int inicio, int
tamaño).
CompareTo() Compara la cadena que contiene el string con otra pasada por parámetro.
Contains() Si la cadena que se le pasa por parámetro forma parte del string, devuelve
un booleano.
Insert() Inserta una cadena de caracteres en una posición concreta del string.
Trim() Quita todos los espacios en blanco del principio y el final de la cadena de
caracteres.
47
Módulo 3A: Programación
https://docs.microsoft.com/es-es/dotnet/api/system.string?view=netcore-
3.1#methods
48
Módulo 3A: Programación
podemos comprobar cuándo finalizan los bucles, entre otras cosas. Para
depurar el código, teclearemos F10 (paso a paso).
49
Módulo 3A: Programación
Los ficheros que entreguemos que formen parte del proyecto deben estar
testeados y tener un correcto funcionamiento. Habrá que solventar los errores
descritos anteriormente.
summary
La etiqueta <summary> debe usarse para describir un tipo y para agregar
información adicional dentro de nuestro código. Gracias a herramientas de
documentación como GhostDoc y Sandcastle, creamos hipervínculos internos
a las páginas de documentación de los elementos de código:
https://docs.microsoft.com/es-es/dotnet/csharp/programming-
guide/xmldoc/cref-attribute
CÓDIGO: XML
<summary>description</summary>
CÓDIGO: XML
namespace ConsoleApp33
class Program
/// <summary>
///
///
/// </summary>
50
Módulo 3A: Programación
Console.WriteLine(caracter);
Console.ReadLine();
CÓDIGO: XML
<?xml version="1.0"?>
<doc>
<assembly>
<name>ConsoleApp33</name>
</assembly>
<members>
<member name="M:ConsoleApp33.Program.Main(System.String[])">
<summary>
</summary>
</member>
</members>
</doc>
51
Módulo 3A: Programación
Los IDE son utilizados por distintos lenguajes de programación como C++,
PHP, Python, Java, C#, Visual Basic, etcétera.
Los IDE deben cumplir con una serie de características para su correcto
funcionamiento, como, por ejemplo:
• Son multiplataforma.
• Reconocen sintaxis.
• Tienen un depurador.
• Formatean el código.
52
Módulo 3A: Programación
4. Programación modular
Hasta ahora hemos estudiado el desarrollo de un programa como una unidad
compuesta por líneas que se ejecutan de forma secuencial, sin embargo, un
acercamiento más próximo a la realidad sería el paradigma conocido como
programación modular.
4.1. Concepto
La programación modular consiste en dividir el problema original en diversos
subproblemas, que se pueden resolver por separado, para, después,
recomponer los resultados y obtener la solución al problema.
• Ventajas:
o Escritura y testing.
o Reutilización de módulos.
o Independencia de fallos.
• Inconvenientes:
53
Módulo 3A: Programación
CÓDIGO:
54
Módulo 3A: Programación
*/
int notaMedia = 0;
*/
notaMedia += notas [ i ];
55
Módulo 3A: Programación
• Función Main
CÓDIGO:
56
Módulo 3A: Programación
• Función calcularMedia().
CÓDIGO:
int notaMedia = 0;
notaMedia += newarray [ i ];
return notaMedia;
57
Módulo 3A: Programación
Sintaxis:
CÓDIGO:
Código de la función
Return expresión;
• Tipo: las funciones, al igual que ocurría con las variables, poseen un
tipo, es decir, el dato que devuelven es de un tipo determinado.
58
Módulo 3A: Programación
Los métodos no tipados son aquellos que realizan una tarea específica y que
pueden recibir parámetros, pero no necesitan devolver un valor.
CÓDIGO:
59
Módulo 3A: Programación
CÓDIGO EJEMPLO:
int x;
x = (b % 2);
if (x == 0)
Console.WriteLine("\nEs par");
} else
Console.WriteLine("\nEs impar");
Ejercicio 1
Solución
60
Módulo 3A: Programación
int numero;
Console.Write("Introduzca el número: ");
numero = Convert.ToInt32( Console.ReadLine() );
Console.WriteLine(Calcular(numero));
}
Ejercicio 2
Solución
aux = numero1;
numero1 = numero2;
numero2 = aux;
}
61
Módulo 3A: Programación
numero1= Convert.ToInt32(Console.ReadLine());
• Por referencia
Cuando ejecutamos una función que tiene parámetros pasados por valor, se
realiza una copia del parámetro que se ha pasado, es decir, que todas las
modificaciones y/o cambios que se realicen se están haciendo en esta copia
que se ha creado. El original no se modifica, de manera que no se altera su
valor en la función.
62
Módulo 3A: Programación
Sin embargo, cuando ejecutamos una función que tiene parámetros pasados
por referencia, todas aquellas modificaciones que se realicen en la función van
a afectar a sus parámetros, ya que se trabaja con los originales.
CÓDIGO EJEMPLO:
Ejemplo
int a = 0;
metodo(ref a);
/* cuando pasamos por valor la variable ‘a’ al método, tanto la variable ‘a’
como la variable ‘numero’ ocupan el mismo espacio de memoria, pero lo
que el valor se sobreescribirá.
Console.WriteLine(a);
63
Módulo 3A: Programación
numero = 1;
params, in y out
Cuando trabajamos con la palabra clave ‘params’ estamos especificando un
paso por valor. En este caso, el tipo de parámetro debe ser una matriz
unidimensional (array).
CÓDIGO EJEMPLO:
Ejemplo
public static void miMetodo(params int[] list)
{
for (int i = 0; i < list.Length; i++)
{
Console.Write(list[i] + " ");
}
Console.WriteLine();
}
int[] miArrayInt = { 5, 6, 7, 8, 9 };
miMetodo(miArrayInt);
}
La palabra clave ‘in’ sirve para pasar parámetros por referencia. Las variables
que se han pasado como argumentos con la palabra clave ‘in’ deben
inicializarse antes de pasarse en una llamada de método o función. Si pasamos
un parámetro con ‘in’, este no puede ser modificado dentro del método.
64
Módulo 3A: Programación
CÓDIGO EJEMPLO:
Ejemplo
La palabra clave ‘out’ también sirve para pasar parámetros por referencia. No
es necesario iniciar la variable antes de pasarla al método.
CÓDIGO EJEMPLO:
Ejemplo
static void Main()
{
int entera;
OutEjemplo(out entera);
Console.WriteLine(entera); // la salida por pantalla será 40
65
Módulo 3A: Programación
Variables globales
CÓDIGO:
class Program
n++;
CambiaValorN();
66
Módulo 3A: Programación
Variables locales
CÓDIGO:
num1 = Convert.ToInt32(Console.ReadLine());
num2 = Convert.ToInt32(Console.ReadLine());
En este caso, las variables temporal e i son locales a la función potencia. Para
Main no existen. Si en Main intentáramos hacer i=10, obtendríamos un
mensaje de error.
67
Módulo 3A: Programación
Lo mismo ocurre con las variables, num1 y num2, que son locales para Main.
Desde la función potencia no podemos acceder a su valor (ni para leerlo ni
para modificarlo).
En este ejemplo, no encontramos ninguna variable global.
CÓDIGO:
static int n = 7;
n++;
CÓDIGO:
static int n = 7;
68
Módulo 3A: Programación
69
Módulo 3A: Programación
Por ejemplo, el programa Visual Studio cuenta con un menú Depurar que
permite acceder a las herramientas que dispone el depurador. El C#, además,
nos facilita unas técnicas propias para controlar diferentes situaciones en las
que se produzcan errores en tiempo de ejecución.
70
Módulo 3A: Programación
• Vinculación
• Ejecución
71
Módulo 3A: Programación
• Compilación
Una vez que estos errores se corrigen, podríamos decir que el programa se va
a compilar y va a pasar a ejecutarse, aunque no sabemos todavía si va a realizar
la función exacta para la que ha sido diseñado.
• Vinculación
• Ejecución
72
Módulo 3A: Programación
Una vez que hemos obtenido el código fuente, debemos comprobar que no
se producen errores en tiempo de ejecución. Si los hubiera, debemos depurar
el programa. Encontrar cuál es la causa que produce un error en tiempo de
ejecución es, a veces, una tarea complicada, por lo que los IDE nos
proporcionan una herramienta denominada “Depurador” que nos facilita la
tarea.
73
Módulo 3A: Programación
74
Módulo 3A: Programación
75
Módulo 3A: Programación
CÓDIGO:
76
Módulo 3A: Programación
CÓDIGO:
using System;
/* El método Next calcula el número aleatorio que está dentro de un intervalo especificado
devolviendo un número menor que el valor máximo de ese intervalo. Mostraremos los
números dejando una separación de 6 unidades entre ellos */
if (ctr % 5 == 0) Console.WriteLine();
if (ctr % 5 == 0) Console.WriteLine();
77
Módulo 3A: Programación
if (ctr % 5 == 0) Console.WriteLine();
// 5 -5 - 20 94 -86
// -67 -93 40 82 68
// 4 4 5 9 9
// 5 1 2 3 5
// 5 4 5 10 5
// 7 7 7 10 5
Sintaxis:
CÓDIGO:
nombre_funcion(var1, …, var2)
78
Módulo 3A: Programación
• Casos recursivos, que son los que se van a encargar de que la función
vuelva a ejecutarse, pero acercándose cada vez más al caso base.
Factorial de un número
n! = n*(n-1)*(n-2)*(n-3)*…*1
3!=3*2*1
4!=4*3*2*1
5!=5*4*3*2*1”
CÓDIGO:
int factorial(int n)
factorial(1)=1;
79
Módulo 3A: Programación
Debemos encontrar uno que sirva para todos los números. Debe ir haciéndose
cada vez más pequeño hasta que consiga llegar al caso base, que es el
factorial de 1.
3!=3*2*1
4!=4*3*2*1
5!=5*4*3*2*1”
3!=3*2*1
4!=4*3!
5!=5*4!
….
Vemos que en todos los casos sucede lo mismo, se multiplica el número por
el número restando una unidad. Por lo que ya tenemos el caso recursivo:
factorial(n)=n*factorial(n-1)
CÓDIGO:
si n>1 entonces
// Caso recursivo
devuelve n*factorial(n-1);
Si no
80
Módulo 3A: Programación
// Caso base
devuelve 1;
Fin Si;
CÓDIGO:
if (n>1)
return n*factorial(n-1);
else
return 1;
123456
Caso base: el usuario introduce valores que no son números naturales (es
decir, menores que uno), el programa devolverá siempre 1.
Caso recursivo: vamos a llamar a la función con dos parámetros. Así, uno de
ellos controlará la salida e irá incrementando en 1, y el otro irá decrementando
hasta llegar al caso base.
CÓDIGO:
int salida = 1;
si n>1 entonces
// Caso recursivo
n- -;
81
Módulo 3A: Programación
Escribimos salida
Si no
// Caso base
devuelve salida;
Fin Si;
CÓDIGO:
if (n > 1)
n--;
} else
return salida
5. Gestión de ficheros
Hasta aquí, hemos visto el uso de variables y las estructuras de datos y hemos
trabajado con información que, una vez que finaliza la ejecución del programa,
desaparece de la memoria, ya que ha estado almacenada en la memoria
principal el tiempo que dura la ejecución del software.
82
Módulo 3A: Programación
CLASE DESCRIPCIÓN
83
Módulo 3A: Programación
Para obtener más información de las clases que del espacio de nombres de
System.IO, podemos acceder a la documentación de Microsoft:
https://docs.microsoft.com/es-es/dotnet/api/system.io?view=netcore-3.1
Como es lógico, y para que esta estructura sea finita, debe existir un directorio
raíz, que va a ser el que contenga a todos los demás y no tenga dependencia
de ningún otro.
En resumen:
Los ficheros o archivos son una secuencia de bits, bytes, líneas o registros
que se almacenan en un dispositivo de almacenamiento secundario, por lo
que la información va a permanecer a pesar de que se cierre la aplicación que
los utilice.
84
Módulo 3A: Programación
• Abrir el fichero.
• Cerrar el fichero.
• Evitan conflictos con sus nombres, ya que cada programa instala sus
ficheros en directorios diferentes. Por tanto, en una misma máquina
pueden existir dos ficheros identificados por el mismo nombre, ya que,
como van a tener distinta ruta, los vamos a poder diferenciar.
85
Módulo 3A: Programación
Tipos de ficheros
86
Módulo 3A: Programación
Posición
lectura/escritura
87
Módulo 3A: Programación
• Según su estructura:
- Ficheros de texto: formados por texto plano sin formato legible por
el usuario.
88
Módulo 3A: Programación
La clase Stream nos permite abstraer de una secuencia de bytes como, por
ejemplo, un archivo, un dispositivo de entrada/salida, una canalización de
comunicación entre procesos o un socket.
Puede escribirse:
c:\\users\\AppData\\file.txt
@c:\users\AppData\file.txt
FileMode nos indica cómo se debe abrir un archivo. Los campos pueden
tomar los siguientes valores:
89
Módulo 3A: Programación
Append Abre un fichero para añadir datos al final del mismo si existe, o crea un
fichero nuevo si no existe.
90
Módulo 3A: Programación
• Flujos base: son aquellos que operan más a nivel máquina, como, por
ejemplo, porción de memoria, espacio de disco o conexión de red.
• Flujos intermedios: son aquellos flujos que trabajan por encima de los
anteriores. Se pueden combinar con el flujo base de manera que este
pueda verse beneficiado por todas las funcionalidades que ofrezca el
flujo base.
91
Módulo 3A: Programación
1. Apertura
Los diferentes modos en los que se puede abrir un fichero son los siguientes:
92
Módulo 3A: Programación
2. Lectura/escritura
• Lectura secuencial
CÓDIGO:
// PSEUDOCÓDIGO
fichero f1;
f1.abrir(lectura);
f1.leer(registro);
FinMientras
// Cerramos el fichero
f1.cerrar();
• Escritura secuencial
CÓDIGO:
// PSEUDOCÓDIGO
fichero f1;
93
Módulo 3A: Programación
f1.abrir(escritura);
f1.escribir(registro);
FinMientras
// Cerramos el fichero
f1.cerrar();
• Lectura aleatoria
CÓDIGO:
// PSEUDOCÓDIGO
fichero f1;
f1.abrir(lectura);
f1.leer(registro);
// Cerramos el fichero
f1.cerrar();
• Escritura aleatoria:
CÓDIGO:
fichero f1;
94
Módulo 3A: Programación
f1.abrir(escritura);
f1.escribir(registro);
finMientras
//Cerramos el fichero
f1.cerrar();
3. Cierre
Vamos a trabajar con estos métodos para ficheros de texto y ficheros binarios.
Ficheros de texto
Los datos pueden ser escritos o leídos de un fichero utilizando los flujos de las
clases StreamWriter y StreamReader:
95
Módulo 3A: Programación
CÓDIGO:
// Creamos la variable fichero con la clase FileStream pasando la ruta del fichero, el modo
de apertura (Open) y cómo vamos a acceder a él (lectura)
CÓDIGO:
// Creamos la variable fichero con la clase FileStream pasando la ruta del fichero, el modo
de apertura (en este caso, vamos a añadir datos al final del fichero -> Append) y cómo
vamos a acceder a él (escritura)
96
Módulo 3A: Programación
fs.WriteLine(frase);
fs.Close();
fichero.Close();
Ficheros binarios
• Read (Byte[], int offset, int count) lee un bloque de bytes de la secuencia
y escribe los datos en un búffer dado.
Los parámetros
o array Byte []: contiene la matriz de bytes especificada con los valores
de offset y reemplazados por los bytes leídos desde el origen actual.
o offset: se colocarán los bytes leídos.
o Count: el número máximo de bytes que se deben leer.
Por ejemplo:
CÓDIGO:
fichero.Read(buffer, 0, buffer.Length);
// Vamos a leer el buffer donde todavía no hemos consumido ningún byte y el número
máximo que vamos a leer es lo que contiene el buffer
97
Módulo 3A: Programación
CÓDIGO:
using System.IO;
// Vamos a trabajar con un fichero imagen, de tal forma que lo abriremos de modo lectura
// Creamos un buffer de tipo byte para poder trabajar con los datos del fichero
// Abrimos el fichero para la lectura y vamos a ir consumiendo todos los bytes del fichero y
mostrándolos por pantalla
fichero.Read(buffer, 0, buffer.Length);
Console.WriteLine(buffer[i]);
//fichero.Close();
CÓDIGO:
using System.IO;
fichero.Read(buffer, 0, buffer.Length);
// vamos a recorrer los bytes del 1000 al 2000 y los vamos a modificar a 0
buffer[i] = 0;
98
Módulo 3A: Programación
fichero2.Write(buffer, 0, buffer.Length);
// Ahora este Segundo archive tiene modificado los bytes del 1000 al 2000
fichero.Close();
fichero2.Close();
Una primera solución es usar el método exists para comprobar si está, antes
de intentar abrirlo.
CÓDIGO:
using System.IO;
if (File.Exists(@"D:\myfile.txt")) {
} else {
o Try/catch:
El bloque try contiene el código protegido que puede producir la
excepción.
Los mensajes de error y/o acciones para corregir el error estarán en el
bloque catch.
99
Módulo 3A: Programación
CÓDIGO:
using System.IO;
string linea;
try
Console.WriteLine(linea);
fs.Close()
fichero.Close();
100
Módulo 3A: Programación
Bibliografía
- Ceballos, F. J. (2011). Microsoft C#. Curso de programación. 2ªEdición. RA-
MA Editorial.
101