How to write to a file in .NET Core?

C#.NetBluetoothCoreclr

C# Problem Overview


I want to use the Bluetooth LE functions in .NET Core (specifically, BluetoothLEAdvertisementWatcher) to write a scanner which logs information to a file. This is to run as a desktop application and preferably as a command line app.

Constructors like System.IO.StreamWriter(string) are not available, apparently. How do I create a file and write to it?

I would be just as happy to be able to do a System.Console.WriteLine(string) but that doesn't seem to be available under .NET Core either.

Update: To clarify, if I could have a program that looks like this run without error, I'll be off to the races.

using System;
using Windows.Devices.Bluetooth.Advertisement;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BluetoothLEAdvertisementWatcher watcher = new BluetoothLEAdvertisementWatcher();
            Console.WriteLine("Hello, world!");
        }
    }
}

Update 2: Here's the project.json file:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

The output of the command dotnet -v run contains this error message:

W:\src\dotnet_helloworld>dotnet -v run
...
W:\src\dotnet_helloworld\Program.cs(2,15): error CS0234: The type or namespace name 'Devices' does not exist in the namespace 'Windows' (are you missing an assembly reference?)
...

C# Solutions


Solution 1 - C#

This code is the skeleton I was looking for when I posed the question. It uses only facilities available in .NET Core.

var watcher = new BluetoothLEAdvertisementWatcher();

var logPath = System.IO.Path.GetTempFileName();
var logFile = System.IO.File.Create(logPath);
var logWriter = new System.IO.StreamWriter(logFile);
logWriter.WriteLine("Log message");
logWriter.Dispose();

Solution 2 - C#

This is the solution I'm using. It uses fewer lines of code and does the job just as good. It's also very compatible with .NET core 2.0

using (StreamWriter writer = System.IO.File.AppendText("logfile.txt"))
{
    writer.WriteLine("log message");
}

Solution 3 - C#

Even better:

using System.IO;

var logPath = Path.GetTempFileName();
using (var writer = File.CreateText(logPath))
{
    writer.WriteLine("log message"); //or .Write(), if you wish
}

Solution 4 - C#

As of today, with RTM, there seems to be this shorter way as well:

var watcher = new BluetoothLEAdvertisementWatcher();

var logPath = System.IO.Path.GetTempFileName();
var logWriter = System.IO.File.CreateText(logPath);
logWriter.WriteLine("Log message");
logWriter.Dispose();

Solution 5 - C#

You can get the System.IO references by using the corefx git repository. This will make the StreamWrite(string) constructor you are looking for available.

This repository will also give you the Console.WriteLine(string) function you are looking for.

Solution 6 - C#

Here is an async FileWriter class.

using System.IO;
public static class AsyncFileWriter
{
    public static async Task WriteToFile(string content)
    {
        var logPath = @"SOME_PATH\log.txt";
        using (var writer = File.CreateText(logPath))
        {
            await writer.WriteLineAsync(content); 
        }
    }
}

Solution 7 - C#

To write to files in .NET Core, you can use two methods:

  1. AppendText()
  2. CreateText()

These two methods are static members of the File class in the System.IO namespace. The difference between them is one appends to an existing file while the other overwrites the file.

Usage examples:

AppendText

using (StreamWriter writer = System.IO.File.AppendText("file.txt"))
{
    writer.WriteLine("message");
}

CreateText

using (StreamWriter writer = System.IO.File.CreateText("file.txt"))
{
    writer.WriteLine("message");
}

Solution 8 - C#

Made it more simple:

    using System.IO;
    ----------------

    var watcher = new BluetoothLEAdvertisementWatcher();

    var streamWriter = new StreamWriter($"Enter\\filepath\\here\\Log.txt");

    streamWriter.WriteLine("Log Message");

    streamWriter.Dispose();

Hope it helps!

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiongauss256View Question on Stackoverflow
Solution 1 - C#gauss256View Answer on Stackoverflow
Solution 2 - C#Temi LajumokeView Answer on Stackoverflow
Solution 3 - C#Soma MbadiweView Answer on Stackoverflow
Solution 4 - C#superjosView Answer on Stackoverflow
Solution 5 - C#FanManProView Answer on Stackoverflow
Solution 6 - C#Vishav PremlallView Answer on Stackoverflow
Solution 7 - C#codejockieView Answer on Stackoverflow
Solution 8 - C#Arjun MGView Answer on Stackoverflow