Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 安全地卸下已安装的驱动器_C_Windows_Winapi_Ntfs_Fat - Fatal编程技术网

C 安全地卸下已安装的驱动器

C 安全地卸下已安装的驱动器,c,windows,winapi,ntfs,fat,C,Windows,Winapi,Ntfs,Fat,我有一个应用程序,通过SATA接口将文件写入格式化为NTFS的外部驱动器 关闭应用程序之前,我确保对每个文件使用FlushFileBuffers刷新所有内容(即CreateFile,FlushFileBuffers,CloseHandle)。然后我卸下驱动器,而不先卸下它 将驱动器插回PC机时,这似乎工作正常。然而,当将其插入OS X时,除非正确卸载驱动器,否则OS似乎找不到任何文件 磁盘中可能缺少什么导致OSX找不到任何东西,有没有一种方法可以在不卸载驱动器的情况下刷新该数据 编辑: 对于ex

我有一个应用程序,通过SATA接口将文件写入格式化为NTFS的外部驱动器

关闭应用程序之前,我确保对每个文件使用
FlushFileBuffers
刷新所有内容(即
CreateFile
FlushFileBuffers
CloseHandle
)。然后我卸下驱动器,而不先卸下它

将驱动器插回PC机时,这似乎工作正常。然而,当将其插入OS X时,除非正确卸载驱动器,否则OS似乎找不到任何文件

磁盘中可能缺少什么导致OSX找不到任何东西,有没有一种方法可以在不卸载驱动器的情况下刷新该数据

编辑:


对于exfat,我遇到了重新安装时“脏”驱动器不可写的问题。

您可能需要阅读此Ronag,这可能会帮助您:

片段

您可能已经知道,在Mac OS X下无法读取默认使用NTFS文件结构格式化的Windows驱动器。在OS X中实现的驱动程序根本无法写入NTFS格式的驱动器,这可能与商业利益有关。 然而,对于想要从Windows NTFS驱动器交换文件的用户来说,这是相当烦人的。这就是为什么开发了一些商业应用程序,但其中大多数都像Paragon NTFS for Mac一样需要花钱,但也有一个免费甚至更好的解决方案可用

编辑-我已经阅读了以下内容,这可能有助于重新安装NTFS驱动器等-我不得不承认,偶尔只使用MAC。-希望我没有朝你错误的方向跑

这是我在苹果论坛上找到的帖子-

我创建了一个脚本来初始化NTFS HDisk,并在写模式下使用它们(只需使用本机OSX驱动程序,无需第三方软件)。在小牛队的情况下,这似乎也起作用。您可以从以下网站下载:

您只需要为每个新的ntfs磁盘运行一次。下次插入已使用“我的脚本”初始化的ntfs磁盘时,该磁盘将自动装入(但是,它不会显示在桌面上,您必须从/Volumes打开它)

硬盘是否已安全删除也很重要,因为NTFS包含一个标志,用于通知磁盘是否已安全删除,不允许使用本机OSX驱动程序以写模式装载它(Linux下也会发生类似情况)。万一发生这种情况,您只需要将其插入windows PC并安全地删除HD(以便它清除该标志)

还有bash脚本供您参考-

#!/bin/bash

checkExisting(){

echo "Checking if already existing device on file..."

while read fileLine; do

    if [ "$line" = "$fileLine" ]; then
        echo "[WARNING] Device already initialized on this system. Nothing to do here"
        open "$FILENAME"
        exit 0;
    fi
done < /etc/fstab

}

addLine(){
    uuid=$(diskutil info "$FILENAME" | grep UUID | cut -d ':' -f2 | tr -d ' ')
    volumeName=$(diskutil info "$FILENAME" | grep "Volume Name" | cut -d ':' -f2 | tr -d ' ')

    if [ "$uuid" = "" ]; then
        line="LABEL=$volumeName none ntfs rw,auto,nobrowse";
    else
        line="UUID=$uuid none ntfs rw,auto,nobrowse";
    fi

    checkExisting;
    echo "# New NTFS HD: $volumeName on $(date) " >> /etc/fstab
    echo $line >> /etc/fstab
    device=$(diskutil info "$FILENAME" | grep "Device Node" | cut -d ':' -f2 | tr -d ' ')
    diskutil unmount "$FILENAME"
    diskutil mount $device
    open $FILENAME;
    exit 0;
}
checkDisk(){
    filetype=$(diskutil info "$FILENAME" | grep "Type (Bundle):" | cut -d ':' -f2 | tr -d ' ')
    #echo $filetype
    if [ "$filetype" = "ntfs" ]; then
        addLine;
    fi

    if [ "$filetype" = "" ]; then
        echo "Error. Please, select a NTFS device"
    fi
}

#Check sudo
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "This script should be run as ROOT. Try sudo"
    exit
fi
echo "___________________________________"
echo "RubeniumTB. 2013 --ruben80(at)gmail.com--"
echo ""
echo "Initialize a NTFS Hard Disk on this system to read and write" 
echo "Next time you won't need to initialize it again. Just plug and open but"
echo "take into account that:"
echo ""
echo "* Configured disks will not be auto-opened!!"
echo "* You will need to open /Volumes and click on your disk!!"
echo ""
echo "* Although it should not happen anything wrong, use at your own risk"
echo ""
echo "* IMPORTANT!!. Be sure that the NTFS device has been safely removed or it won't"
echo "be mounted in write mode. In this case you can connect it again to any windows PC," 
echo "remove safely, and then connect to your MAC"
echo ""
echo "* Also IMPORTANT!!. To avoid problems use SHORT names for the Volume names, "
echo "NO SPACES, and preferably only letters/numbers. Of course no special characters!!" 
echo ""
echo "Now you are ready...."
echo "SELECT a NTFS Disk to initialize on this system"
echo "Write quit to exit"
echo ""

select FILENAME in "/Volumes"/*
do

     case "$FILENAME" in
        "$QUIT")
          echo "Exiting."
          break
          ;;
        *)
          echo "You picked "$FILENAME" "
          checkDisk;
          ;;
  esac
done
#/bin/bash
checkExisting(){
echo“检查文件中是否已有设备…”
在读取文件行时;执行以下操作
如果[“$line”=“$fileLine”];则
echo“[警告]设备已在此系统上初始化。此处无需执行任何操作”
打开“$FILENAME”
出口0;
fi
完成>/etc/fstab
echo$line>>/etc/fstab
device=$(diskutil info“$FILENAME”| grep“设备节点”| cut-d':'-f2 | tr-d')
diskutil卸载“$FILENAME”
diskutil mount$设备
打开$FILENAME;
出口0;
}
checkDisk(){
filetype=$(diskutil信息“$FILENAME”| grep”类型(Bundle):“| cut-d':”-f2 | tr-d“”)
#echo$filetype
如果[“$filetype”=“ntfs”];则
addLine;
fi
如果[“$filetype”=”],则
echo“错误。请选择一个NTFS设备”
fi
}
#检查sudo
如果[$(/usr/bin/id-u)-ne 0]];然后
echo“此脚本应以ROOT用户身份运行。请尝试sudo”
出口
fi
回声“uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
echo“RubeniumTB.2013--ruben80(在)gmail.com--”
回声“”
echo“初始化此系统上的NTFS硬盘以进行读写”
echo“下次您不需要再次初始化它。只需插入并打开,但”
echo“考虑到:
回声“”
echo“*配置的磁盘将不会自动打开!!”
echo“*您需要打开/卷并单击磁盘!!”
回声“”
echo“*虽然不应发生任何错误,但使用风险自负”
回声“”
echo“*重要!!。请确保NTFS设备已安全删除,否则将无法删除”
echo“可以在写入模式下安装。在这种情况下,您可以再次将其连接到任何windows PC,”
echo“安全删除,然后连接到MAC”
回声“”
echo“*也很重要!!。为避免出现问题,请使用短名称作为卷名,”
echo“没有空格,最好只有字母/数字。当然没有特殊字符!!”
回声“”
echo“现在你准备好了……”
echo“选择要在此系统上初始化的NTFS磁盘”
回显“写入退出以退出”
回声“”
在“/卷”中选择文件名/*
做
中的大小写“$FILENAME”
“$QUIT”)
回声“退出”
打破
;;
*)
echo“您选择了”$FILENAME“”
检查盘;
;;
以撒
完成

您可能想阅读此Ronag,这可能会帮助您:

片段

您可能已经知道,在Mac OS X下无法读取默认使用NTFS文件结构格式化的Windows驱动器。在OS X中实现的驱动程序根本无法写入NTFS格式的驱动器,这可能与商业利益有关。 然而,对于想要从Windows NTFS驱动器交换文件的用户来说,这是相当烦人的。这就是为什么开发了一些商业应用程序的原因,但大多数都像Paragon NTFS for Mac一样需要花钱,但也有一个免费的