¿Es posible convertir una pequeña porción de código VB.NET a C#? [cerrado]

Resuelto Sravya Damodar asked hace 10 meses • 0 respuestas

Quiero cambiar algunas líneas de código vb.net a código C# ya que el código es muy antiguo. ¿Será posible convertir algunas líneas de código sin alterar la estructura?

Por ejemplo, en este código

Restart:
        sIssCo = ""
        On Error GoTo ErrorRtn
        sErrorMsg = "Unable to activate Word."
        System.Windows.Forms.Application.DoEvents()
        oWord.Visible = True
        oWord.StatusBar = "Initiating Word Merge..."
        oWord.System.Cursor = Microsoft.Office.Interop.Word.WdCursorType.wdCursorWait
        oWord.StatusBar = "Deleting previous temp docs..."
        On Error GoTo ErrorRtn
        If Dir(gsTempFileDir & "*.doc") <> "" Then
        oFileSys.DeleteFile(gsTempFileDir & "*.doc")
        End If

Sólo quiero cambiar las líneas siguientes a C#

If Dir(gsTempFileDir & "*.doc") <> "" Then
    oFileSys.DeleteFile(gsTempFileDir & "*.doc")
End If

Probé el siguiente código.

if (Directory.GetFiles(gsTempFileDir.FullName, "*.doc").Length > 0)
{
    foreach (var file in gsTempFileDir.GetFiles("*.doc"))
    {
        file.Delete();
    }
}

No es compatible porque el código está en vb.net. También agregué algunos ensamblajes como Importaciones.

Microsoft.Office.Interop.Word
Imports System.IO.Directory
Imports System.IO.File

para hacerlo compatible con el código C#, tampoco funcionaba. ¿ Alguna otra forma posible System.IO.oFileSys.delete(gsTempFileDir & "*.doc")como esta?

Sravya Damodar avatar Feb 16 '24 13:02 Sravya Damodar
Aceptado

¿Por qué querrías escribir código C#? Simplemente escriba el código VB.NET pero escríbalo correctamente, en lugar de como si fuera VB6. Este:

if (Directory.GetFiles(gsTempFileDir.FullName, "*.doc").Length > 0)
{
    foreach (var file in gsTempFileDir.GetFiles("*.doc"))
    {
        file.Delete();
    }
}

se puede escribir casi exactamente igual en VB:

If Directory.GetFiles(gsTempFileDir.FullName, "*.doc").Length > 0 Then
    For Each file In gsTempFileDir.GetFiles("*.doc")
        file.Delete()
    Next
End If

Por supuesto, eso tiene sus propios problemas, pero eso es lo que escribiste. Si quieres hacerlo correctamente, ¿por qué llamar GetFilesdos veces? Simplemente llámelo una vez y recorra los resultados. Si la matriz resultante está vacía, el bucle no hará nada. No hace falta una Ifdeclaración. Puedes llamar Directory.GetFiles:

For Each filePath In Directory.GetFiles(gsTempFileDir.FullName, "*.doc")
    File.Delete(filePath)
Next

o DirectoryInfo.GetFiles:

For Each file In gsTempFileDir.GetFiles("*.doc")
    file.Delete()
Next
jmcilhinney avatar Feb 16 '2024 08:02 jmcilhinney