Java 1.6 - определяет символьные ссылки

Потерянный в VBA

Невозможно определить, что происходит. К сожалению.

Option Explicit

Public startCell As Range

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean

    Dim i As Long

    For i = LBound(arr) To UBound(arr)
        If arr(i, 1) = stringToBeFound Then
            IsInArray = True
            Exit For
        End If
    Next

End Function

Sub AmendMaster()

    Const cSource As Variant = "Sheet1"     ' Source Worksheet Name/Index
    Const cSrc1 As Variant = "A"            ' Source Column 1 Letter/Number
    Const cSrc2 As Variant = "AC"           ' Source Column 2 Letter/Number
    Const cSrcFirstR As Long = 3            ' Source First Row Number

    Const cTarget As Variant = "Main_Data"  ' Target Worksheet Name/Index
    Const cTgt1 As Variant = "A"            ' Target Column 1 Letter/Number
    Const cTgt2 As Variant = "AB"           ' Target Column 2 Letter/Number
    Const cTgtFirstR As Long = 2            ' Target First Row Number

    Dim ws As Worksheet     ' Source Worksheet
    Dim rngU As Range       ' Union Range
    Dim vntSrc As Variant   ' Source Array
    Dim vntTgt As Variant   ' Target Array
    Dim srcLastR As Long    ' Source Last Row Number
    Dim tgtLastR As Long    ' Target Last Row Number
    Dim i As Long           ' Array Row Counter
    Dim j As Long

    With ThisWorkbook.Worksheets(cTarget)
        tgtLastR = .Cells(.Rows.Count, cTgt1).End(xlUp).Row
        vntTgt = .Range(.Cells(cTgtFirstR, cTgt1), .Cells(tgtLastR, cTgt2))
    End With

    For i = 1 To Workbooks.Count
        If Workbooks(i).Name <> ThisWorkbook.Name _
                And Windows(Workbooks(i).Name).Visible = True Then
            Debug.Print Workbooks(i).Name
            With Workbooks(i).Worksheets(cSource)
                srcLastR = .Cells(.Rows.Count, cSrc1).End(xlUp).Row
                vntSrc = .Range(.Cells(cSrcFirstR, cSrc1), _
                        .Cells(srcLastR, cSrc2))
            End With
            Exit For
        End If
    Next

    For i = 1 To UBound(vntSrc)
        For j = 1 To UBound(vntTgt)
            If vntTgt(i, UBound(vntTgt, 2)) = "PAID" _
                    And vntSrc(i, 1) = vntTgt(j, 1) Then
                With ThisWorkbook.Worksheets(cTarget)
                    .Rows(j).Hidden = True ' Delete
                End With
            End If
        Next
    Next

End Sub
42
задан luk2302 28 July 2016 в 11:30
поделиться

3 ответа

The technique used in Apache Commons uses the canonical path to the parent directory, not the file itself. I don't think that you can guarantee that a mismatch is due to a symbolic link, but it's a good indication that the file needs special treatment.

This is Apache code (subject to their license), modified for compactness.

public static boolean isSymlink(File file) throws IOException {
  if (file == null)
    throw new NullPointerException("File must not be null");
  File canon;
  if (file.getParent() == null) {
    canon = file;
  } else {
    File canonDir = file.getParentFile().getCanonicalFile();
    canon = new File(canonDir, file.getName());
  }
  return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
}
45
ответ дан 26 November 2019 в 23:45
поделиться

Java 1.6 не обеспечивает такой низкоуровневый доступ к файловой системе. Похоже, NIO 2 , который должен быть включен в Java 1.7, будет иметь поддержку символических ссылок. Доступен проект нового API . Здесь упоминаются символические ссылки , , при этом возможно создание и , следуя . Я не совсем уверен, какой метод следует использовать, чтобы узнать, является ли файл символической ссылкой. Есть список рассылки для обсуждения NIO 2 - возможно, они узнают.

13
ответ дан Esko Luontola 26 November 2019 в 23:45
поделиться

Похоже, что getCanonicalPath () может делать другие вещи, которые могут отличать его от абсолютного пути.

Этот метод сначала преобразует этот путь в абсолютный формировать при необходимости, как будто вызывая метод getAbsolutePath (), а затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).

Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.

и затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).

Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.

и затем отображает его в его уникальную форму системно-зависимым способом. Обычно это включает удаление избыточных имен, таких как "." и ".." из пути, разрешения символических ссылок (на платформах UNIX) и преобразования букв дисков в стандартный регистр (на платформах Microsoft Windows).

Но это может работать в подавляющем большинстве случаев использования; Ваш пробег может отличаться.

5
ответ дан 26 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: