Здравствуйте
Я работал над приложением, похожим на терминал, чтобы лучше программировать на С#, просто чтобы помочь мне учиться. Я решил добавить функцию, которая будет копировать файл точно так же, как он есть, в новый файл... Кажется, он работает почти идеально. При открытии в Notepad ++ файл имеет длину всего в несколько строк и очень, очень близок к тому, что касается фактического размера файла. Однако дублированная копия файла никогда не запускается. Пишет, что файл поврежден. У меня такое ощущение, что это в методах чтения и перезаписи двоичных файлов в файлы, которые я создал. Код выглядит следующим образом, спасибо за помощь. Извините и за спагетти-код, я становлюсь немного неаккуратным, когда возюсь с новыми идеями.
Класс, который обрабатывает копирование/запись файлов
using System;
using System.IO;
//using System.Collections.Generic;
namespace ConsoleFileExplorer
{
class FileTransfer
{
private BinaryWriter writer;
private BinaryReader reader;
private FileStream fsc; // file to be duplicated
private FileStream fsn; // new location of file
int[] fileData;
private string _file;
public FileTransfer(String file)
{
_file = file;
fsc = new FileStream(file, FileMode.Open);
reader = new BinaryReader(fsc);
}
// Reads all the original files data to an array of bytes
public byte[] ReadAllDataToArray()
{
byte[] bytes = reader.ReadBytes((int)fsc.Length); // reading bytes from the original file
return bytes;
}
// writes the array of original byte data to a new file
public void WriteDataFromArray(byte[] fileData, string path) // got a feeling this is the problem :p
{
fsn = new FileStream(path, FileMode.Create);
writer = new BinaryWriter(fsn);
int i = 0;
while(i < fileData.Length)
{
writer.Write(fileData[i]);
i++;
}
}
}
}
Код, взаимодействующий с этим классом.
(Sleep(5000) вызвано тем, что я ожидал ошибки при первой попытке...
case '3':
Console.Write("Enter source file: ");
string sourceFile = Console.ReadLine();
if (sourceFile == "")
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.Error.WriteLine("Must input a proper file path.\n");
Console.ForegroundColor = ConsoleColor.White;
Menu();
} else {
Console.WriteLine("Copying Data"); System.Threading.Thread.Sleep(5000);
FileTransfer trans = new FileTransfer(sourceFile);
//copying the original files data
byte[] data = trans.ReadAllDataToArray();
Console.Write("Enter Location to store data: ");
string newPath = Console.ReadLine();
// Just for me to make sure it doesnt exit if i forget
if(newPath == "")
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.Error.WriteLine("Cannot have empty path.");
Console.ForegroundColor = ConsoleColor.White;
Menu();
} else
{
Console.WriteLine("Writing data to file"); System.Threading.Thread.Sleep(5000);
trans.WriteDataFromArray(data, newPath);
Console.WriteLine("File stored.");
Console.ReadLine();
Console.Clear();
Menu();
}
}
break;
Файл по сравнению с новым файлом щелкните правой кнопкой мыши -> открыть в новой вкладке, вероятно, это хорошая идея